我的模型看起来像这样:
class User < ActiveRecord::Base
attr_accessible: :name
has_many :reviews
end
class Product < ActiveRecord::Base
attr_accessible: :name
has_many :reviews
end
class Review < ActiveRecord::Base
attr_accessible: :comment
belongs_to :user
belongs_to :product
validates :user_id, :presence => true
validates :product_id, :presence => true
end
我试图找出创建新评论的最佳方法,因为:user_id和:product_id不是attr_accessible。通常,我会通过关联(@ user.reviews.create)创建审核以自动设置:user_id,但在这种情况下,我不确定如何设置product_id。
我的理解是,如果我执行@ user.reviews.create(params),将忽略所有非attr_accessible参数。
答案 0 :(得分:2)
你可以这样做:
@user.reviews.create(params[:new_review])
......或类似的。您还可以使用嵌套属性:
class User < ActiveRecord::Base
has_many :reviews
accepts_nested_attributes_for :reviews
...
请参阅http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html上的“嵌套属性示例”。
答案 1 :(得分:1)
您似乎希望在用户和产品模型之间实现多对多关系,并使用Review模型作为连接表,将两者与添加的注释字符串连接起来。这可以通过Rails中的许多通过关联来实现。首先阅读Rails Guides on Associations。
设置Review
模型时,请为User
和Product
添加外键:
rails generate model review user_id:integer product_id:integer
按如下方式设置关联:
class User < ActiveRecord::Base
has_many :reviews
has_many :products, through: :reviews
end
class Product < ActiveRecord::Base
has_many :reviews
has_many :users, through: :reviews
end
class Review < ActiveRecord::Base
# has comment string attribute
belongs_to :user
belongs_to :product
end
这将允许您拨打电话,如:
user.products << Product.first
user.reviews.first.comment = 'My first comment!'
以下是制作评论的方法:
@user = current_user
product = Product.find(params[:id])
@user.reviews.create(product: product)