Ruby on rails 有时使用<&书信电报;关于ActiveRecord关联?
有时有效,有时无效:Ruby on rails 有时使用<&书信电报;关于ActiveRecord关联?,ruby-on-rails,ruby,activerecord,associations,Ruby On Rails,Ruby,Activerecord,Associations,有时有效,有时无效: class Foo has_many :bars end class Bar belongs_to :foo end foo = Foo.create bar1 = Bar.create bar2 = Bar.create foo.bars << [bar1, bar2] class-Foo 有很多酒吧吗 结束 分类栏 属于:富 结束 foo=foo.create bar1=Bar.create bar2=Bar.create foo.bar正常
class Foo
has_many :bars
end
class Bar
belongs_to :foo
end
foo = Foo.create
bar1 = Bar.create
bar2 = Bar.create
foo.bars << [bar1, bar2]
class-Foo
有很多酒吧吗
结束
分类栏
属于:富
结束
foo=foo.create
bar1=Bar.create
bar2=Bar.create
foo.bar正常如果对新创建的对象执行“正常如果执行”,我建议使用有许多关联帮助器方法build
或create
:
foo = Foo.create
bar1 = foo.bars.create # saves the record
bar2 = foo.bars.build # does not save the record
bar2.save! # actually creates the object
这些帮助程序可以对属性进行散列,就像常规的create
和new
一样-唯一的区别是它们会自动为您设置关联
如果您试图添加到foo
的条形图对象已存在,则我首选在条形图对象中设置关联:
foo = Foo.create # alternately Foo.find(1)
bar = Bar.find(1) # alternately Bar.new, but then use Foo.bars.build
bar.foo = foo
bar.save!
这样,追踪问题就容易多了,例如,您可以轻松处理验证错误。对于新创建的对象,的唯一区别是,我建议使用有许多关联帮助器方法build
或create
:
foo = Foo.create
bar1 = foo.bars.create # saves the record
bar2 = foo.bars.build # does not save the record
bar2.save! # actually creates the object
这些帮助程序可以对属性进行散列,就像常规的create
和new
一样-唯一的区别是它们会自动为您设置关联
如果您试图添加到foo
的条形图对象已存在,则我首选在条形图对象中设置关联:
foo = Foo.create # alternately Foo.find(1)
bar = Bar.find(1) # alternately Bar.new, but then use Foo.bars.build
bar.foo = foo
bar.save!
这样,追踪问题就容易多了,例如,您可以轻松处理验证错误。与的唯一区别是语法foo.Bar没有问题当你说“new”对象时,语法foo.Bar没有问题,你是说Bar
的一个实例还没有保存到数据库中吗?是的,Bar.new\u记录?==true
当您说“新建”对象时,您是指尚未保存到数据库的Bar
实例吗?是的,Bar.new\u记录?==是的
这是对这些概念的一个很好的概述,但实际上并没有解决我的问题:-)@John:Michael用解决了这个问题,你是对的……我的问题甚至没有说明它不起作用的情况。如果/当我遇到一个案例时,我会更新这个问题。这是对这些概念的一个很好的概述,但实际上并没有解决我的问题:-)@John:Michael使用解决了这个问题,你是对的……我的问题甚至没有演示它不起作用的案例。如果/当我遇到案件,我会更新这个问题。这是完全正确的,我不知道你为什么会被否决。(我认为应该要求它在投票被否决后留下评论。)无论如何,嗯,你是对的,我使用了没有理由约翰,老实说,我无法解释为什么它在某些情况下有效。我觉得这完全正确,我不知道你为什么会被否决。(我认为应该要求它在投票被否决后留下评论。)无论如何,嗯,你是对的,我使用了没有理由约翰,老实说,我无法解释为什么它在某些情况下有效。伊姆霍
foo = Foo.create # alternately Foo.find(1)
bar = Bar.find(1) # alternately Bar.new, but then use Foo.bars.build
bar.foo = foo
bar.save!
foo = Foo.new
bar1 = Foo.bars.build
bar2 = Foo.bars.build
foo.save! # saves foo, bar1, and bar2 in one transaction,
# provided they are all valid