私は、学生がメンバーシップを使って登録できるコースを持っているとしましょう(例えば、コースと学生のhas_and_belongs_to_manyリレーションシップ)。いくつかのメンバーシップは、そう、ちょうど(ないなど、信用のために)クラスを観察している学生のためのものである:has_many:throughとhonor:条件で新しいレコードを作成するにはどうすればいいですか?
class Course < ActiveRecord::Base
has_many :memberships
has_many :students,
:through => :memberships
has_many :observers,
:through => :memberships,
:source => :student,
:conditions => { :memberships => { :observer => true }}
end
ここで素晴らしい作品情報:
observers = Course.find(37).observers
ここでは動作しないものです。
new_observer = Course.find(37).observers.build(:name => 'Joe Student')
私は1つの関連付けを使用して新しいレコードを構築することができると思っているだろうし、それが生成されています:
- 新しい学生レコード( 'ジョー・学生')
- 新会員記録(Course_IDに= 37、STUDENT_ID =(ジョー)、オブザーバー=真)
しかし、その代わりに、私は得る:
ActiveRecord::AssociationTypeMismatch: Membership expected, got Array
これはどうやって洞察力に感謝しているのですか?私はメンバーシップ・モデルで名前付きスコープでこれを実行しようとしましたが、has_manyを使用して関連付けのスコープを使用できないようです。
ご協力いただきありがとうございます!
ありがとうございます!非常に役立ちます!ああ、まだ100%ではありません。オブザーバブール値は、sql: c.observers.create!(:name => 'abby')=> 学生作成(2.0ms) "created_at")VALUES( 'abby'、 '2009-1 0-04 12:41:35'、 '2009-10-04 12:41:35') メンバーシップの作成(0。(NULL、 '2009-10-04 12:41:35'、4,2、0ms)INSERT INTO「メンバシップ」(「オブザーバ」、「updated_at」、「student_id」、「course_id」、「 created_at」) '2009-10-04 12:41:35') **オブザーバの値(NULL)に注意してください。 – Eric
愚かな質問:この問題はまだ存在するのですか、レコードを作成するときにハッシュ条件が正常に機能していますか? ( 'observer:true'を設定します)。あるいはもっと良い方法があるかもしれません(私たちはレール4について話しています) –