has_many:通过联想混淆

时间:2011-12-05 22:06:31

标签: ruby-on-rails-3 associations model-associations

我是铁杆上的红宝石新手,而且我一直坚持使用协会。

我想开发一个网络应用,会员可以在其中创建联系人。联系人可以有一个或多个类别(Baker / Actor / Developer / anything)。

据此,我知道我至少需要三种模式:成员,联系人和类别。 我还创建了模型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:姓名(扎克),类别(演员)

联系人3:姓名(运气),类别(董事)

如果我按演员排序,我会得到

分类:演员=&gt;

联络1:姓名(约翰)

联系人2:姓名(扎克)

但我不知道如何在我的控制器中获取所有联系人。 我尝试了一些但没有任何作用。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您的设置似乎很好。

试试:

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")