2015-09-13 27 views
0

我可以做可以在視圖中使用@current_user但不控制器

<p>Welcome <%= @current_user.login %></p> 
    <% @comments.each do |comments| %> 
    <h3><%= comments.body %></h3> 
    <% end %> 

但不

@cuser = @current_user 
@user = User.find(params[:user_id]) 
@user.comments.create(:user_id => @user.id, :commenter => @cuser.login, :body => params[:comment][:body]) 
respond_to do |format| 
    format.js 
    format.html { redirect_to(@user, :notice => 'Comment was successfully created.') } 

其中給出 「爲無未定義的方法`登錄:NilClass」 錯誤

如果我可以在一個實例中使用@current_user,爲什麼不使用其他

+0

你使用'devise'寶石嗎? – asiniy

+0

不,你爲什麼問? – gleb

+0

我對你獲得'current_user'的價值感興趣。有什麼方法嗎?其他的東西? – asiniy

回答

1

@current_user替換爲current_user

看來,您在控制器中調用了current_user方法。 current_user爲控制器@current_user創建一個實例變量。這就是爲什麼你可以在視圖中看到這個變量。

您將在意見趕上一個錯誤,如果你刪除控制器動作

+0

這給出了同樣的錯誤。 – gleb

3

使用current_user而不是@current_user在這兩個視圖和控制器的所有current_user方法呼召。

您的ApplicationController上可能有一個current_user方法。該方法正在創建您在視圖中使用的@current_user變量。

在視圖和控制器中都使用current_user是一種常見的做法。要檢查登錄,只需執行current_user.login。那可行。

+0

它仍然只能在視圖 – gleb

+0

這是從我的ApplicationController高清CURRENT_USER 回報,除非會話[:USER_ID] @current_user || = User.find_by_id(會話[:USER_ID]) 結束 – gleb

+0

難道這是什麼做的路線? – gleb

相關問題