has_many : через ассоциацию запутался

Я новичок в рубине на рельсах, и я застрял в ассоциациях.

Я хочу разработать веб-приложение, в котором участник может создать контакт. Контакт может иметь одну или несколько категорий (пекарь / актер / разработчик / что угодно).

Из этого я знаю, что мне нужно как минимум три модели: член, контакт и категории. Я также создал модель category_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

Is it ok ?

И потом, хотелось бы получить все контакты по категориям.

Пример :

Рубрики: актеры, режиссеры

Контакт 1: имя (Джон), категории (актеры, режиссеры)

Контакт 2: имя (Зак), категория (актеры)

Контакт 3: имя (удача), категория (директора)

Если я отсортирую по актерам, я получу

Категория : Актеры =>

Контакт 1: имя (Джон)

Контакт 2: имя (Зак)

Но я не знаю, как получить все мои контакты в моем контроллере. Я пробовал вещи, но ничего не работает.

Спасибо за помощь.


person pea    schedule 05.12.2011    source источник


Ответы (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")
person Robin    schedule 05.12.2011
comment
Вид той же ошибки, что и предыдущий ответ: неинициализированная константа Contact::CategoriesContact - person pea; 06.12.2011
comment
Попытайтесь понять, почему он ищет CategoriesContact в модуле контактов... - person Robin; 06.12.2011