次のような通常の1対多の関係を持つクラスがいくつかあります。
class Blog < ActiveRecord::Base
has_many :posts
end
class Post < ActiveRecord::Base
belongs_to :blog
validates :blog_id, presence: true
end
ブログを作成してそれにたくさんの投稿を追加すると、次のようになります。
blog = Blog.new
blog.posts = [Post.new, Post.new]
次のようにブログを保存することはできません。
blog.save
投稿の blog_id が空白であるため、投稿の検証に失敗しています。Rails はID またはオブジェクトの存在をチェックするのに十分賢いと思っていましたが、そうではありません。
これを解決する適切なRailsの方法は何ですか? 以下よりも優れたもの:
saved = true
Blog.transaction do
saved &&= @blog.save
if saved && params[:blog][:posts].responds_to?(:each)
params[:blog][:posts].each do |post|
p = Post.new({blog: @blog}, without_protection: true)
saved &&= p.save
end
end
end