gpt4 book ai didi

ruby-on-rails - 使用 has_many :through 时如何访问 Rails 连接模型属性

转载 作者:数据小太阳 更新时间:2023-10-29 07:15:45 25 4
gpt4 key购买 nike

我有一个类似这样的数据模型:

# columns include collection_item_id, collection_id, item_id, position, etc
class CollectionItem < ActiveRecord::Base
self.primary_key = 'collection_item_id'
belongs_to :collection
belongs_to :item
end

class Item < ActiveRecord::Base
has_many :collection_items
has_many :collections, :through => :collection_items, :source => :collection
end

class Collection < ActiveRecord::Base
has_many :collection_items, :order => :position
has_many :items, :through => :collection_items, :source => :item, :order => :position
end

一个项目可以出现在多个集合中,也可以在同一个集合中的不同位置出现不止一次。

我正在尝试创建一个辅助方法来创建一个菜单,其中包含每个集合中的每个项目。我想使用 collection_item_id 来跟踪请求之间当前选择的项目,但我无法通过 Item 类访问连接模型的任何属性。

def helper_method( collection_id )
colls = Collection.find :all
colls.each do |coll|
coll.items.each do |item|
# !!! FAILS HERE ( undefined method `collection_item_id' )
do_something_with( item.collection_item_id )
end
end
end

我也试过了,但它也失败了(未定义的方法`collection_item')

do_something_with( item.collection_item.collection_item_id )

编辑:感谢 serioys sam 指出以上明显错误

我还尝试访问连接模型中的其他属性,如下所示:

do_something_with( item.position )

和:

do_something_with( item.collection_item.position )

编辑:感谢 serioys sam 指出以上明显错误

但他们也失败了。

谁能告诉我如何进行此操作?

编辑:-------------------->

我从在线文档中发现,使用 has_and_belongs_to_many 会将连接表属性附加到检索到的项目,但显然它已被弃用。我还没试过。

目前我正在像这样修改我的 Collection 模型:

class Collection < ActiveRecord::Base
has_many :collection_items, :order => :position, :include => :item
...
end

并更改助手以使用 coll.collection_items 而不是 coll.items

编辑:-------------------->

我已将我的助手更改为按上述方式工作并且工作正常 - (谢谢你 sam)

这让我的代码变得一团糟 - 因为这里没有详细说明的其他因素 - 但没有什么是一两个小时的重构无法解决的。

最佳答案

在您的示例中,您在 Item 模型关系中为 collection_items 和集合定义了 has_many,生成的关联方法分别为 collection_items 和 collections,它们都返回一个数组,因此您在此处尝试访问的方式是错误的。这主要是曼对多关系的情况。只需检查这个 Asscociation Documentation以供进一步引用。

关于ruby-on-rails - 使用 has_many :through 时如何访问 Rails 连接模型属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/637981/

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