Этот вопрос для Rails 3.0.0.
У меня есть 5 таблиц (надуманный, но разумный пример, только 4 вопроса):
capabilities
id
name
capability_roles
role_id
capability_id
user_roles
user_id
role_id
users
id
name
roles
id
name
В основном возможности подключаются к role_capabilities подключаются к user_roles
подключается к пользователям.
Таблицы * _roles - это просто карты. У них нет первичного ключа. Роли
Сам стол практически не имеет отношения к этому вопросу.
Это позволяет редактировать возможности каждой роли независимо от
роли, которые могут принимать пользователи.
Было бы неплохо просто выяснить, какие возможности есть у пользователя.
Теперь настройте ассоциации:
users
has_many :user_roles # .joins( :user_roles ).to_sql # works
user_roles
belongs_to :user # .joins( :user ).to_sql # works
# .joins( :capability_roles ).to_sql # works (no corresponding belongs_to!)
has_many :capability_roles, :primary_key => role_id, :foreign_key => :role_id
# .joins( :capabilities ).to_sql # fails
has_many :capabilities, :through => :capability_roles
capability_roles
belongs_to :capabilities # .joins( :capabilities ).to_sql # works
# .joins( :user_roles ).to_sql # works (no corresponding belongs_to!)
has_many :user_roles, :primary_key => role_id, :foreign_key => :role_id
# .joins( :users ).to_sql # fails
has_many :users, :through => :user_roles
capabilities
has_many :capability_roles # .joins( :capability_roles ).to_sql # works
Мой вопрос:
Почему не has_many: через работу здесь?
Похоже, для чего было разработано has_many: through. Я не уверен, если
проблема с отсутствующими / не относящимися к этому параметромочным. (1023 *)
Ошибка, которую я вижу:
NoMethodError: неопределенный метод `eq 'для nil: NilClass