以下是我的两个模型:
class Article < ActiveRecord::Base
attr_accessible :content
has_many :comments
end
class Comment < ActiveRecord::Base
attr_accessible :content
belongs_to :article
end
我正在尝试使用以下代码在seed.rb中播种数据库:
Article.create(
[{
content: "Hi! This is my first article!",
comments: [{content: "It sucks"}, {content: "Best article ever!"}]
}],
without_protection: true)
但是rake db:seed给出了以下错误消息:
rake aborted!
Comment(#28467560) expected, got Hash(#13868840)
Tasks: TOP => db:seed
(See full trace by running task with --trace)
可以像这样播种数据库吗?
如果是的话是一个后续问题:我搜索了一些,似乎要做这种(嵌套?)质量分配我需要为我想要分配的属性添加'accepts_nested_attributes_for'。 (可能类似于评论模型的'accepts_nested_attributes_for:article')
有没有办法允许这类似'without_protection:true'?因为我只想在播种数据库时接受这种质量分配。
答案 0 :(得分:4)
您看到此错误的原因是,当您将关联模型分配给另一个模型时(如@ article.comment = comment),预计右侧是实际对象,而不是哈希对象属性。
如果要通过传入注释的参数来创建文章,则需要包括
文章模型中的accepts_nested_attributes_for :comments
,并将:comments_attributes
添加到attr_accesible
列表。
这应该允许你上面写的内容。
我认为不可能进行条件性质量分配,因为这可能会危及安全性(从设计的角度来看)。
编辑:您还需要更改评论:[{content: "It sucks"}, {content: "Best article ever!"}]
至comments_attributes: [{content: "It sucks"}, {content: "Best article ever!"}]