我用的has_many通過首次工作,儘管大量的閱讀在這裏和guide我不理解對通過訪問表屬性的正確方法。我的表與另一篇文章中的示例相同。Rails 3中的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
我得到正確的值,但由於只應該有成爲每個用戶/產品對的一個合作者記錄,索引將我拋棄,讓我覺得我做錯了什麼。
謝謝您的閱讀!
編輯
也許我沒有得到通過概念的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個查詢返回一組。所以我想我需要某種唯一性約束,但這必須是屬於鍵的兩種類型的複合鍵。這甚至有可能嗎?有沒有更好的模型結構?
感謝這麼多的快速和有益的反應!
請參閱'has_one'而不是'has_many'。 – meagar