我只允许已登录的用户发表评论,但在发表评论时,如何让其说明当前已登录的用户发布评论?
我的评论创建看起来像这样
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.create(params[:comment])
redirect_to post_path(@post)
end
这是评论表格
<div class="container">
<% if signed_in? %>
<%= form_for([@post, @post.comments.build]) do |f| %>
<p>
<%= f.label :username %>
<%= f.text_field :commenter %>
</p>
<p>
<%= f.label :comment %>
<%= f.text_area :body %>
</p>
<p>
<%= f.submit "Submit Comment" %>
</p>
<% end %>
<% else %>
<p> <em>You must be signed in to comment</em> </p>
<% end %>
</div>
这就是之后评论的意思
<h5><em>
<%= comment.commenter %> posted
<% if comment.created_at > Time.now.beginning_of_day %>
<%="#{time_ago_in_words(comment.created_at)} ago"%>
<% else %>
<%= comment.created_at.strftime("%b %d, %Y") %>
<% end %>
</em></h5>
<p>
<%= link_to 'Destroy Comment', [comment.post, comment],
method: :delete, data: {confirm: 'Are you sure?'} %>
</p>
我不完全确定如何让它记住current_user发布它。我是否必须将我的评论不仅与帖子相关联,还与用户相关联?
答案 0 :(得分:0)
你可以在两个地方中的任何一个地方做到这一点。在您的表单中,当您执行post.comments.build
时,您可以将当前用户作为海报传递:post.comments.build(commenter: current_user)
。或者,您可以将其放在create
操作中,如下所示:
@comment = @post.comments.build(params[:comment])
@comment.commenter = current_user
@comment.save