6

我有一个 Club 模型和一个 Member 模型,它们通过 Membership 模型关联。换句话说

class Club < ActiveRecord::Base
  has_many :members, :through => :memberships
end

class Member < ActiveRecord::Base
  has_many :clubs, :through => :memberships
end

但是,当我尝试创建新成员并将其添加到俱乐部时,我收到一条错误消息,提示该俱乐部无效。

> club = Club.find(1)
> member = Member.new(:name => 'Member Name')
> member.clubs << club
> member.save

member.save语句将返回 false。查看 member.errors.messages,我发现

> member.errors.messages
@messages={:clubs=>["is invalid"]}

真正奇怪的是,这不会发生在我的开发环境(使用 sqlite3)中,而只会发生在我使用 mySQL 的 EngineYard 部署中。

4

2 回答 2

11

我只是想通了我自己的问题。My Club 类包含一个虚拟属性 :password,仅在创建俱乐部时使用,否则应忽略。事实证明,由于一个错误,密码不会被忽略,而是会在保存俱乐部关联时进行验证。所以吉姆·斯图尔特的评论是正确的:俱乐部实际上是无效的,尽管我认为它是有效的。

开发中没有出现问题的原因是我在开发环境中关闭了密码验证,所以我可以使用简单的密码进行测试。

于 2013-03-16T22:37:40.100 回答
3

您是否memberships在开发和生产中都有一个表(即,您是否rake db:migrate到处运行)?

您可能还需要像这样修改模型:

class Club < ActiveRecord::Base
  has_many :memberships
  has_many :members, :through => :memberships
end

class Member < ActiveRecord::Base
  has_many :memberships
  has_many :clubs, :through => :memberships
end

class Membership < ActiveRecord::Base
  belongs_to :club
  belongs_to :member
end
于 2013-03-16T21:51:43.180 回答