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 :通过关联混淆的主要内容,如果未能解决你的问题,请参考以下文章

使用 has_many 时如何创建关联模型的实例:通过关联

如何通过 has_many 关联在 FactoryBot 中设置工厂

如何通过“has_many”关联获取数据?

has_many 在关联用户和项目时通过关联错误

通过关联设置 has_many

如何通过关联为 has_many 定义工厂