has_many :通过关联混淆
Posted
技术标签:
【中文标题】has_many :通过关联混淆【英文标题】:has_many :through association confused 【发布时间】:2011-12-05 22:06:31 【问题描述】:我是 ruby on rails 的新手,我被关联所困。
我想开发一个网络应用程序,成员可以在其中创建联系人。一个联系人可以有一个或多个类别(贝克/演员/开发人员/任何东西)。
据此,我知道我至少需要三个模型:成员、联系人和类别。 我还创建了模型 categories_contacts。
这是我的模特协会:
class Member < ActiveRecord::Base
has_many :contacts
end
class Contact < ActiveRecord::Base
belongs_to :member
has_many :categories_contacts
has_many :categories, :through => :categories_contacts
end
class Category < ActiveRecord::Base
has_many :categories_contacts
has_many :contacts, :through => :categories_contacts
end
class CategoriesContacts < ActiveRecord::Base
belongs_to :contact
belongs_to :category
end
还好吗?
然后,我想按类别获取所有联系人。
例子:
类别:演员、导演
联系人 1:姓名(约翰)、类别(演员、导演)
联系人 2:姓名(Zack)、类别(演员)
联系人3:姓名(运气)、类别(导演)
如果我按演员排序,我会得到
类别:演员 =>
联系人 1:姓名(约翰)
联系人 2:姓名(Zack)
但我不知道如何在我的控制器中获取我的所有联系人。 我尝试了一些东西,但没有任何效果。
感谢您的帮助。
【问题讨论】:
【参考方案1】:您的设置看起来不错。
试试看:
Contact.joins(:categories).where("categories.id in ?", params[:category_ids]).all
如果要排序:
Contact.joins(:categories).where("categories.id in ?", params[:category_ids]).order("contacts.name ASC")
【讨论】:
与前面的答案类似的错误:未初始化的常量 Contact::CategoriesContact 尝试理解它为什么在 Contact 模块中搜索 CategoriesContact...以上是关于has_many :通过关联混淆的主要内容,如果未能解决你的问题,请参考以下文章