无法将current_user.name作为注释属性传递

时间:2015-03-15 23:17:26

标签: ruby-on-rails ruby comments

以下解决方法:

    <%= f.label :Commenter %><br>
    <%= f.text_field :commenter, :value => current_user.name %>

这适用于将用户名传递给评论者属性而无需输入 - 如果有必要可以编辑它的额外奖励!


我正在尝试让我的网站显示创建评论的用户的名称。为此,我希望将评论者(评论的属性)指定为current_user.name。

comment具有属性commenter,body和expdate。

是否可以通过表单传递current_user.name到comment.create方法?

我试过这个:

<div>
    <%= form_for([@project, @project.comments.build]) do |f| %>
        <br>

        **<%= @commenter = current_user.name %>**

        <%= f.label :Comment %><br>
        <%= f.text_area :body %>
        <br>
        <%= f.label :'Expected Date' %><br>
        <%= f.date_select :expdate %>
        <br>
        <br>
        <%= f.submit %>
    <% end %>
</div>

我将commenter属性指定为current_user。这不会将其传递给create方法吗?

我也试过在comments_controller中分配它,如下所示:

def create
    **@comment.commenter = current_user.name**
    @project = Project.find(params[:project_id])
    @comment = @project.comments.create(comment_params)
    redirect_to project_path(@project)
end

但我收到一个错误,抱怨评论者不是一个定义的方法。

我试过的两种方法都不允许我创建评论,有没有人对我如何做到这一点有任何想法? 非常感谢提前!

2 个答案:

答案 0 :(得分:2)

您可以在控制器的create方法中执行此操作:

@commenter = current_user.name

就这么简单。如果您需要在视图中访问评论者名称,请将其添加到评论类:

def commenter(user)
  user.name
end

然后在你看来:

<%= @comment.commenter(current_user) %>

如果您要设置@ comment.commenter,则必须定义两个模型之间的关系。不确定您要完成的是什么,但可以在此处找到有关Active Record关联的更多信息:http://guides.rubyonrails.org/association_basics.html

答案 1 :(得分:1)

在控制器中,像这样:

def create
  @project = Project.find(params[:project_id])
  @comment = @project.comments.create(comment_params)
  @comment.commenter = current_user.name
  redirect_to project_path(@project)
end

在视图中:

<% @project.comments.each do |comment| %>
  <tr>
    <td><%= comment.body  %></td>
    <td><%= comment.commenter %></td>
    </td>
  </tr>
<% end %>