2014-01-17 70 views
0

所以我有這個應用程序,你創建一個用戶,然後你可以添加電影和節目到數據庫。就像IMDB上的一個不好的版本?無法編輯數據庫條目

現在..我有此控制器:https://github.com/Veske/form/blob/ryhm/app/controllers/movies_controller.rb

我已成立了電影的路線,也擁有所有必要的視圖文件..但是當我嘗試去在頁面上編輯的電影之一:http://whatever.com/shows/1/edit例如,它給了我一個錯誤:

Couldn't find User with id=1 

def correct_user 
    @user = User.find(params[:id]) 
    redirect_to root_url unless current_user?(@user) 
    end 
end 

params 
{"id"=>"1"} 

現在..爲什麼會認爲我在它扔,該參數是一個@user PARAM當我對電影特製一個更新和編輯控制器?

+0

張貼您的路線會讓我們更好地瞭解錯誤。儘管如此,你有沒有嘗試在你的路線中使用資源?喜歡的資源:顯示#這將生成http://什麼。com/shows/1 /編輯 – rav

+0

您可以通過回購導航到路線,downvote不需要。 – rlecaro2

回答

2

你似乎不明白routes。您使用params[:id]的上下文是電影控制器,因此,該ID將是電影ID。同時,您使用相同的參數進行身份驗證(?),從而給出錯誤。

對於基本身份驗證,您可以使用會話哈希,而對於更高級的身份驗證,有很多寶石,正在設計最流行的。

PS:使用rake routes來檢查您的可用路由及其URL參數。

+0

我正在使用的資源:電影電影。我現在修好了一切,但現在它給了我一個錯誤,沒有路線匹配[POST]「/ movies/1/edit」。但資源應該給我所有的電影路線?這是爲什麼。 – Veske

+0

標記爲已解決,因爲它解決了原始問題。 – Veske

+1

很高興幫助。一定要檢查rails文檔http://guides.rubyonrails.org/routing.html(與上面相同)。每次你想先解決寶石和圖書館的問題時,都不需要重新發明輪子。 (您的路由缺失問題可能來自錯誤的提交按鈕,因爲編輯操作會爲您提供表單,並且發佈到「movies/1」的內容將會更新。請再次檢查耙路,您會看到。 – rlecaro2

1

這是一個MoviesController,所以params[:id]實際上是movie_id,即您的url「http://whatever.com/shows/1/edit」中的數字「1」。不是user_id。所以它在第@user = User.find(params[:id])行拋出異常。

我經歷了您的代碼,但無法找到正確的user_id應該來自哪裏。 Movie型號不是belongs_to user。你應該看看user來自哪裏。

1

您的shows_controller.rb文件調用correct_user在運行您正在調用的編輯操作之前,它專門查找第70行的用戶。因此,如果沒有用戶的ID爲1.

1

爲什麼當我有一個專門爲電影製作的更新和編輯控制器時,我會拋出它的參數,是@user參數?

因爲您在編輯操作中調用的控制器頂部有一個before_action篩選器。

您會看到correct_user方法,該方法使用的是基於params[:id]的用戶。爲了檢驗這是您的實際問題,你可能想嘗試在你的控制人變更線68:

@user = User.last #quick fix 

以上可以作爲一個快速解決 - 你不應該讓你張貼了關於這個錯誤只要您的用戶已登錄。如果這允許您避免該錯誤,那麼當您的控制器調用此correct_user方法時,您需要關注正確指定此值User#id值。

+0

它解決了錯誤是的,但它會將我重定向到根網址,因爲我想訪問的頁面僅用於登錄的用戶,但是這種更改不會再知道它。 – Veske

+0

好吧,那麼您需要爲用戶和要編輯的演出項目正確分配值。什麼參數保存用戶ID? – Ecnalyr

+0

我實際上最後刪除了def correct_user @user = User.find(params [:id]) 我其實並不需要它,以前沒有意識到它。但是,這固定了整個問題。現在我有一個新的路線.. – Veske