Rails 3.1 has_many,:through =>不工作(加入模型返回nil)

时间:2011-10-19 15:48:35

标签: ruby-on-rails-3.1 has-many-through

更新:这完全是由于一个愚蠢的错误:之前,我已经定义了一个与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

我可能在这里做了一些愚蠢的事情,所以我非常感谢能够发现以下ConversationUserConversation模型出错的人。

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,但计划的其他功能需要加入模型。)

1 个答案:

答案 0 :(得分:2)

回答问题

这完全是由于一个愚蠢的错误:之前,我已经定义了一个与ActiveRecord创建的方法同名的方法,它掩盖了正确的行为并破坏了所有内容。