Обновление : Это все из-за глупой ошибки: ранее я определил метод с тем же именем, что и у одного из методов, создаваемых ActiveRecord, который маскировал правильное поведение и нарушал все.Я не могу ответить / закрыть вопрос еще несколько часов, извиняюсь перед любым, кто заглянул в это!
В моем приложении на Rails 3.1 возникла проблема с отношением has_many, :through =>
.
Это приводит в бешенство, потому что, насколько я вижу, оно идентично двум подобным отношениям, которые оба работают.
Владелец этих отношений объявляет их следующим образом:
has_many :user_skills, :dependent => :destroy
has_many :skills, :through => :user_skills
has_many :user_roles, :dependent => :destroy
has_many :roles, :through => :user_roles
has_many :conversation_users
has_many :conversations, :through => :conversation_users
(я знаю, что я не соблюдаю стандартную номенклатуру для таблиц соединения - я только читаю о соглашении обоих-множественного числа, имена-алфавитные после настройки, и я буду рефакторинг позже)
Первые две пары отношений (навыки и роли) работают очень хорошо.
Окончательные отношения (разговоры) неработать полностью.user.conversation_users
возвращает ожидаемый массив, но user.conversations
возвращает nil
.Не пустой массив, nil
.
Я вполне могу сделать что-то глупое здесь, поэтому я был бы очень признателен всем, кто может заметить что-то не так с ConversationUser
или Conversation
моделями ниже.
разговор_пользователь.рб
class ConversationUser < ActiveRecord::Base
belongs_to :user, :inverse_of => :conversation_users
belongs_to :conversation, :inverse_of => :conversation_users
validates_presence_of :user
validates_presence_of :conversation
end
разговор.рб
class Conversation < ActiveRecord::Base
has_many :messages, :dependent => :destroy
has_many :conversation_users, :dependent => :destroy
has_many :users, :through => :conversation_users
validates_presence_of :unique_id
end
(я также знаю, что это недействительно достаточно сложный, чтобы оправдать has_many, :through =>
над has_and_belongs_to_many
, но запланированные дополнительные функции потребуют моделей объединения.)