Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 有时使用<&书信电报;关于ActiveRecord关联?_Ruby On Rails_Ruby_Activerecord_Associations - Fatal编程技术网

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