Вот мои две модели:Seed has_many отношение с использованием массового назначения
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)
Однако грабли БД: 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» для модели Comment)
Есть ли способ разрешить это похожее на «без_защиты: истина»? Потому что я хочу только принять это массовое назначение при посеве базы данных.
Спасибо, это работает. Единственная проблема в том, что «no_protection: true» больше не требуется. Мне не очень нравится подвергать большую часть модели, чем нужно, чтобы сделать ее более удобной для посева базы данных:/ – rnd
Единственный новый атрибут, который вы раскрываете здесь: comment_attributes, и так как они просто перенаправлены в модель комментариев (где единственным доступным атрибутом является: content), вы на самом деле не показываете больше моделей, чем раньше. – cdesrosiers
Другими словами: comments_attributes на самом деле не является частью модели, скорее это хэш атрибутов модели (которые в любом случае доступны). – cdesrosiers