0

编辑:我在我的 rails 应用程序中创建了一个新模型,用户可以在其中评论指南。我希望它自动将 current_user 分配为评论者。我在确定如何分配“评论者”(无论是否为 current_user)方面遇到了真正的问题。我现在对属性和关系完全感到困惑,如果有人可以提供帮助,我将不胜感激

正如下面的代码所示 - 我似乎无法分配任何内容作为评论者。我可以创建一个新的评论(正文),但似乎根本无法分配评论者(它的值为'nil)

评论控制器.rb

 def create
            @guideline = Guideline.find(params[:guideline_id])
            @comment = @guideline.comments.create params[:comment].merge(commenter: current_user)
            redirect_to guideline_path(@guideline)
        end

评论.rb(模型)

class Comment < ActiveRecord::Base
 belongs_to :guideline
 belongs_to :commenter, class_name: 'User'
 belongs_to :user

  attr_accessible :body, :commenter
    end

guideline.rb(模型)

belongs_to :user
has_many :favourite_guidelines
has_many :comments, :dependent => :destroy

数据库迁移有

create_table :comments do |t|
      t.string :commenter
      t.text :body
      t.references :guideline

      t.timestamps
    end
    add_index :comments, :guideline_id

我的 _form 有

<%= f.input :commenter %>
<%= f.input :body, label: 'Comment', as: :text, :input_html => { :cols => 200, :rows => 3 } %>
4

3 回答 3

1

您的评论者属性是一个字符串,它不起作用。将您的迁移更改为:

create_table :comments do |t|
  t.references :commenter
  # ...
end

此外,belongs_to :user从您的 Comment 模型中删除该位,:commenter_id而不是添加:commenter到您的 attr_accessible 并更改创建评论的方式:

@comment = @guideline.comments.build params[:comment].merge(commenter_id: current_user.id)
@comment.save

在这些更改之后,它应该可以工作。

于 2013-03-07T14:34:24.980 回答
0

假设以下关联

# comment.rb
belongs_to :commenter, class_name: 'User'

尝试

# controller
@comment = @guideline.comments.create params[:comment].merge(commenter_id: current_user.id)
于 2013-03-07T11:40:23.780 回答
0
class Comment < ActiveRecord::Base
  before_validation :current_user_makes_the_comment

  private
    def current_user_makes_the_comment
      self.user_id = current_user.id
    end
end

或尝试使用current_user.build语法并guideline_idcreate方法中传递

于 2013-03-07T11:37:55.260 回答