编辑:我在我的rails应用程序中创建了一个新模型,用户可以在指南上发表评论。我希望它自动分配current_user作为评论者。我在解决如何分配“评论者”(无论是否为current_user)方面遇到了实际问题。我现在对属性和关系完全感到困惑,如果有人可以提供帮助,我将非常感激
正如下面的代码所示 - 我似乎无法分配任何评论者。我可以创建一个新的评论(正文),但似乎根本无法分配评论者(其值为'nil)
comments_controller.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
comment.rb(model)
class Comment < ActiveRecord::Base
belongs_to :guideline
belongs_to :commenter, class_name: 'User'
belongs_to :user
attr_accessible :body, :commenter
end
guideline.rb(model)
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 } %>
答案 0 :(得分:1)
您的commenter属性是一个字符串,不起作用。将迁移更改为:
create_table :comments do |t|
t.references :commenter
# ...
end
另外,从您的评论模型中移除belongs_to :user
位,将:commenter_id
代替:commenter
添加到您的attr_accessible,并更改您创建评论的方式:
@comment = @guideline.comments.build params[:comment].merge(commenter_id: current_user.id)
@comment.save
完成这些更改后,它应该可以正常工作。
答案 1 :(得分: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_id
方法中传递create
答案 2 :(得分:0)
假设以下关联
# comment.rb
belongs_to :commenter, class_name: 'User'
试
# controller
@comment = @guideline.comments.create params[:comment].merge(commenter_id: current_user.id)