我永远无法做到的一件事就是实施评论功能。在我学会这样做之前,我不会离开我的电脑。
此行引发错误:
<strong><%= comment.user.first_name %></strong>
显然user
是nil
;但为什么?我需要做些什么才能让它发挥作用?
评论应属于指南和用户。用户和指南都有很多评论。
我从
开始rails g scaffold comment body:text guide:references user:references
然后迁移数据库。我也完成了模型协会。
这是我的指南控制器显示动作:
def show
@guide = Guide.find(params[:id])
@comment = @guide.comments.build
end
以下是Guide show视图中涉及评论的部分:
<h3>Comments</h3>
<% @guide.comments.each do |comment| %>
<div>
<strong><%= comment.user.first_name %></strong>
<br />
<p><%= comment.body %></p>
</div>
<% end %>
<%= render 'comments/form' %>
以下是评论表格部分:
<%= simple_form_for(@comment) do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<%= f.input :body %>
<%= f.association :user %>
<%= f.association :guide %>
</div>
<div class="form-actions">
<%= f.button :submit %>
</div>
<% end %>
User.rb
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable, #:recoverable,
:rememberable, :trackable, :validatable
validates :first_name, presence: true
validates :email, presence: true
validates :email, uniqueness: true
validates :runescape_username, presence: true
has_many :guides
has_many :comments
acts_as_voter
def user_score
self.guides.inject(0) { |sum, guide| sum += guide.score }
end
end
Comment.rb
class Comment < ActiveRecord::Base
belongs_to :user
belongs_to :guide
end
评论控制器创建动作:
def create
@comment = Comment.new(comment_params)
respond_to do |format|
if @comment.save
format.html { redirect_to @comment, notice: 'Comment was successfully created.' }
format.json { render action: 'show', status: :created, location: @comment }
else
format.html { render action: 'new' }
format.json { render json: @comment.errors, status: :unprocessable_entity }
end
end
end
答案 0 :(得分:1)
替换
行@comment = Comment.new(comment_params)
与
@comment = current_user.comments.build(comment_params)
在Comments#create
行动中。
您收到此错误是因为您未将current_user
分配给已创建的Comment
。这就是comment.user
返回nil
的原因。
如AndreDurao所述,您还可以在Comment
模型中验证user_id状态,如下所示:
class Comment
validates_presence_of :user
# ...
end
答案 1 :(得分:0)
要摆脱该错误,请尝试此<%= comment.user.try(:first_name) %>