更新:这完全是由于一个愚蠢的错误:之前,我已经定义了一个与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
模型出错的人。
conversation_user.rb
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
conversation.rb
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
,但计划的其他功能需要加入模型。)
答案 0 :(得分:2)
回答问题:
这完全是由于一个愚蠢的错误:之前,我已经定义了一个与ActiveRecord创建的方法同名的方法,它掩盖了正确的行为并破坏了所有内容。