我有几个具有通常一对多关系的类,例如:
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