gpt4 book ai didi

ruby-on-rails - 创建嵌套关联记录 Ruby on Rails

转载 作者:行者123 更新时间:2023-12-03 12:18:25 25 4
gpt4 key购买 nike

显然,在下面的示例中,我忽略了一些非常简单的事情,我试图在实例化新父记录的同时创建嵌套关联记录。

我希望有一双全新的眼睛能帮助我找到困扰我好几天的问题。提前致谢!我错过了什么/搞砸了什么?这看起来很微不足道。

ActiveRecord::NestedAttributes 显然不高兴。

class ContentGroup < ActiveRecord::Base
attr_protected

has_many :contents, :dependent=>:destroy

accepts_nested_attributes_for :contents
end

class Content < ActiveRecord::Base 
attr_protected

has_one :sort_item, :as=>:sortable
belongs_to :content_group, :dependent=>:destroy

accepts_nested_attributes_for :sort_item
end

class SortItem < ActiveRecord::Base
attr_accessible :position, :sortable_id, :sortable_type
belongs_to :sortable, :polymorphic=>true
end

在 Rails 控制台中,轻度嵌套调用按预期工作:

> p = {"sort_item_attributes"=>{"position"=>"1"}}
> b = Content.new(p)
=> Content id: nil, content_group_id: nil

另外一个巢穴爆炸了:

> p = {"contents_attributes"=>{"sort_item_attributes"=>{"position"=>"1"}}}
> cg = ContentGroup.new(p)

ActiveRecord::UnknownAttributeError: unknown attribute: position
from /.rvm/gems/ruby-1.9.3-p392/gems/activerecord-3.2.13/lib/active_record/attribute_assignment.rb:88:in `block in assign_attributes'
from /.rvm/gems/ruby-1.9.3-p392/gems/activerecord-3.2.13/lib/active_record/attribute_assignment.rb:78:in `each'
from /.rvm/gems/ruby-1.9.3-p392/gems/activerecord-3.2.13/lib/active_record/attribute_assignment.rb:78:in `assign_attributes'
from /.rvm/gems/ruby-1.9.3-p392/gems/activerecord-3.2.13/lib/active_record/base.rb:498:in `initialize'
from /.rvm/gems/ruby-1.9.3-p392/gems/activerecord-3.2.13/lib/active_record/reflection.rb:183:in `new'
from /.rvm/gems/ruby-1.9.3-p392/gems/activerecord-3.2.13/lib/active_record/reflection.rb:183:in `build_association'
from /.rvm/gems/ruby-1.9.3-p392/gems/activerecord-3.2.13/lib/active_record/associations/association.rb:233:in `build_record'
from /.rvm/gems/ruby-1.9.3-p392/gems/activerecord-3.2.13/lib/active_record/associations/collection_association.rb:112:in `build'
from /.rvm/gems/ruby-1.9.3-p392/gems/activerecord-3.2.13/lib/active_record/nested_attributes.rb:406:in `block in assign_nested_attributes_for_collection_association'
from /.rvm/gems/ruby-1.9.3-p392/gems/activerecord-3.2.13/lib/active_record/nested_attributes.rb:401:in `each'
from /.rvm/gems/ruby-1.9.3-p392/gems/activerecord-3.2.13/lib/active_record/nested_attributes.rb:401:in `assign_nested_attributes_for_collection_association'
from /.rvm/gems/ruby-1.9.3-p392/gems/activerecord-3.2.13/lib/active_record/nested_attributes.rb:289:in `contents_attributes='
from /.rvm/gems/ruby-1.9.3-p392/gems/activerecord-3.2.13/lib/active_record/attribute_assignment.rb:94:in `block in assign_attributes'
from /.rvm/gems/ruby-1.9.3-p392/gems/activerecord-3.2.13/lib/active_record/attribute_assignment.rb:93:in `each'
from /.rvm/gems/ruby-1.9.3-p392/gems/activerecord-3.2.13/lib/active_record/attribute_assignment.rb:93:in `assign_attributes'
from /.rvm/gems/ruby-1.9.3-p392/gems/activerecord-3.2.13/lib/active_record/base.rb:498:in `initialize'
from (irb):10:in `new'
from (irb):10
from /.rvm/gems/ruby-1.9.3-p392/gems/railties-3.2.13/lib/rails/commands/console.rb:47:in `start'
from /.rvm/gems/ruby-1.9.3-p392/gems/railties-3.2.13/lib/rails/commands/console.rb:8:in `start'
from /.rvm/gems/ruby-1.9.3-p392/gems/railties-3.2.13/lib/rails/commands.rb:41:in `<top (required)>'
from script/rails:6:in `require'

希望这个问题可以得到解决,如果我有明显的错误,我们深表歉意。

最佳答案

好吧,这最终变得非常愚蠢,错误日志根本没有帮助,甚至没有一点帮助。所以,我最终弄乱了你应该能够传递给 Model.new() 的散列,以便实例化嵌套在散列中的所有关联(rails doc 在大多数情况下都非常好)。但是,我发现似乎没有记录(除非有人可以指出它在文档中的正确位置)是:

you must assign a key to a ARRAY of hashes in order to correctly instantiate a new child association record:

(示例 Rails 控制台)

不正确:

> p = {"contents_attributes"=>{"sort_item_attributes"=>{"position"=>"1"}}}

正确:

> p = {"contents_attributes"=>[{"sort_item_attributes"=>{"position"=>"1"}}]}

请注意非常细微的区别:您需要拥有嵌套关联的键 - "contents_attributes",指向一个数组 - [{"sort_item_attributes"=>{"position "=>"1"}}],因为是一个content_groups,在本例中,有_many个内容。

has_one 关系,例如内容 has_one sort_item 的关系,缺乏这种必要性。

从理论上讲,这是完全有道理的,但错误日志并没有为我指出任何解决我遇到的问题的好方向,而且 Rails 文档似乎也有不足之处。我最终不得不阅读一些 nested_attributes.rb 代码/示例第 93-95 行。此外,我正在做大量的 ajax 工作,这让我解决了这个问题,这也无济于事,所以我的大脑有点不正常。

希望我花在这个问题上的时间能帮助其他人快速找到相同/相似问题的答案。

关于ruby-on-rails - 创建嵌套关联记录 Ruby on Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18730420/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com