0

與下面的代碼相關聯的用戶的化身......錯誤顯示用戶名和誰與評論

<%= image_tag comment.user.avatar.url(:medium), class: "circle-extrasmall" %> 
<%= comment.user.name %> 

我的錯誤...

undefined method `avatar' for nil:NilClass 

我想我已經爲用戶和評論創建了正確的關聯。

下面是在控制器中...

class CommentsController < ApplicationController 

def create 
@challenge = Challenge.find(params[:challenge_id]) 
@comment = @challenge.comments.create(params[:comment]) 
@comment.user_id = current_user 
flash[:notice] = "Comment has been created!" 
redirect_to @challenge 
end 

end 

和這裏的是什麼模型?

class Comment < ActiveRecord::Base 
attr_accessible :challenge_id, :user_id, :text 

validates :user_id, presence: true 

belongs_to :challenge 
belongs_to :user 
end 

但是,我不知道是什麼原因造成的錯誤。我是Ruby-on-Rails的新手。預先感謝您的建議。

回答

0

普萊斯改變創建動作代碼

@comment = @challenge.comments.new(params[:comment]) 
@comment.user_id = current_user.id 
@comment.save 

正如你已經有一些記錄不具有USER_ID。所以,你需要刪除這些記錄,或者現在你可以像在以下襬脫這種錯誤

<% comment_user = comment.user%> 
<%= image_tag comment_user.avatar.url(:medium), class: "circle-extrasmall" unless comment_user.blank?%> 
<%= comment_user.name unless comment_user.blank?%> 
+0

我仍然得到同樣的錯誤... 未定義的方法'阿凡達」的製作方法無:NilClass –

+0

是的,這是因爲你的數據庫中有一些沒有user_id的記錄。因此刪除這些記錄或者您可以使用<%= image_tag comment.user.avatar.url(:medium),class:「circle-extrasmall」除非comment.user.blank?%> <%= comment.user.name除非comment.user.blank? %> –

+0

好吧,我沒有再收到零錯誤。但是,它仍然沒有顯示用戶名或頭像。我不認爲在創建評論時user_id被添加到評論中。 驗證:user_id,presence:true在模型中,它不允許我發表評論,這意味着它不能識別我猜測的current_user_id。有任何想法嗎? –

1

的根據你的錯誤的用戶沒有節省了comment。所以它顯示comment.user.avatar的錯誤。當用戶對象爲零時,您無法獲得其值avatar

在代碼中創建方法comment.user應該是current_user

您可以編輯像

def create 

@challenge = Challenge.find(params[:challenge_id]) 
@comment = @challenge.comments.build(params[:comment]) 
@comment.user = current_user 

@comment.save 
flash[:notice] = "Comment has been created!" 
redirect_to @challenge 
end 
+0

我仍然收到相同的錯誤... 未定義的方法'avatar'爲零:NilClass –

+0

是否在您保存的評論對象中找到了user_id? – Debadatt

+0

我不認爲它是當用戶創建一個user_id添加到評論。任何想法如何做到這一點? –

相關問題