has_many :通过关联混淆

发布于 2024-12-19 13:51:23 字数 1002 浏览 2 评论 0原文

我是 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:姓名(扎克)、类别(演员)

联系人 3:姓名(Luck)、类别(导演)

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

类别:演员 =>

联系人 1:姓名(约翰)

联系人 2:姓名(扎克)

但我不知道如何在控制器中获取所有联系人。 我尝试了一些东西,但没有任何效果。

谢谢你的帮助。

I'm new to ruby on rails and i'm stuck with associations.

I want to develop a web app where a member can create a contact. A contact can have one or more categories (Baker / Actor / Developer / anything).

From that, I know I need at least three models : member, contact and categories.
I also created the model categories_contacts.

Here are my models associations :

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

Is it ok ?

And then, I would like to get all the contacts by categories.

Example :

Categories : actors, directors

Contact 1 : name(John), categories(actors, directors)

Contact 2 : name(Zack), category(actors)

Contact 3 : name(Luck), category(directors)

If I sort by actors, I would get

Categorie : Actors =>

Contact 1 : name(John)

Contact 2 : name(Zack)

But I don't know how to get all my contacts in my controller.
I tried stuff but nothing works.

Thanks for helping.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

岁月静好 2024-12-26 13:51:23

你的设置看起来不错。

尝试一下:

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

Your setup seems fine.

Try that:

Contact.joins(:categories).where("categories.id in ?", params[:category_ids]).all

If you want to sort:

Contact.joins(:categories).where("categories.id in ?", params[:category_ids]).order("contacts.name ASC")
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文