私は初めて has_many スルーを使用しています。こことガイド をよく読んだにもかかわらず、スルー テーブルの属性にアクセスする正しい方法を理解していません。私のテーブルは、別の投稿のこの例と同じです。
class Product < ActiveRecord::Base
has_many :collaborators
has_many :users, :through => :collaborators
end
class User < ActiveRecord::Base
has_many :collaborators
has_many :products, :through => :collaborators
end
class Collaborator < ActiveRecord::Base
belongs_to :product
belongs_to :user
end
共同作業者テーブルに追加の属性、たとえばhours_spentがあると仮定すると、特定のユーザーと製品の共同作業者テーブルからhours_spentを見つける正しい方法は何ですか?
製品を介してユーザーを見つけ、次のように繰り返し処理している場合
@product.users.each do |user|
これはうまくいくようです
user.collaborator[0].hours_spent
私は正しい値を取得しますが、ユーザー/製品のペアごとに 1 つのコラボレーター レコードしか存在しないはずなので、インデックスが私を混乱させ、何か間違ったことをしていると思います。
読んでくれてありがとう!
編集
おそらく、概念を通じて has_many を取得していません。おそらくMySQLの例が役立つでしょう。
私が考えていたのは
SELECT * FROM collaborators where user_id = 1;
結果としてセット(ゼロ以上)が期待されます。同様に
SELECT * FROM collaborators where product_id = 1;
私にもセットをくれますが、
SELECT * FROM collaborators where user_id = 1 and product_id = 1;
最大で1行になります。
私の理解が正しければ、3 つのクエリはすべてセットを返します。したがって、ある種の一意性制約が必要だと思いますが、それは両方の属しているキーで、ある種の複合キーでなければなりません。それは可能ですか?これをよりよくモデル化する構造はありますか?
迅速かつ有益な回答をありがとうございました!