当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《使用has_many:through时如何访问rails连接模型属性》经验,为你挑选了0个好方法。

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

# 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

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

我改变了我的帮手,如上所述工作,它工作正常 - (谢谢山姆)

这让我的代码变得一团糟 - 因为其他因素在这里没有详细说明 - 但是重新分解的一两个小时都不会解决.

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有