如何将用户与评论相关联?

时间:2014-02-02 04:16:57

标签: ruby-on-rails

我只允许已登录的用户发表评论,但在发表评论时,如何让其说明当前已登录的用户发布评论?

我的评论创建看起来像这样

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发布它。我是否必须将我的评论不仅与帖子相关联,还与用户相关联?

1 个答案:

答案 0 :(得分:0)

你可以在两个地方中的任何一个地方做到这一点。在您的表单中,当您执行post.comments.build时,您可以将当前用户作为海报传递:post.comments.build(commenter: current_user)。或者,您可以将其放在create操作中,如下所示:

@comment = @post.comments.build(params[:comment])
@comment.commenter = current_user
@comment.save