6

クラブモデルとメンバーモデルがあり、これらはメンバーシップモデルを介して関連付けられています。言い換えると

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.savefalseを返します。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 に答える