0
我有兩個表/模型(用戶,人口統計學),它們之間關係鬆散,共享一個公共列(電子郵件)。用同一封電子郵件可能有多個用戶記錄,但只有一個人口統計記錄。ActiveRecord無密鑰關聯
是否可以定義has_one和has_many關係,並強制它使用電子郵件列而不是id?
感謝, 斯科特
附:如果有問題,我正在使用ActiveRecord 3.x
我有兩個表/模型(用戶,人口統計學),它們之間關係鬆散,共享一個公共列(電子郵件)。用同一封電子郵件可能有多個用戶記錄,但只有一個人口統計記錄。ActiveRecord無密鑰關聯
是否可以定義has_one和has_many關係,並強制它使用電子郵件列而不是id?
感謝, 斯科特
附:如果有問題,我正在使用ActiveRecord 3.x
您不能使用非唯一數據作爲密鑰,因爲沒有必要強制實施資源所屬的哪個電子郵件地址實例。儘管您可以將電子郵件作爲外鍵使用,但它會返回使用該電子郵件地址的所有用戶的受衆特徵。
要覆蓋的外鍵做:
belongs_to :user, :foreign_key => 'email'
參考:http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html
訣竅是覆蓋/設置:primary_key和:foreign_key選項。這裏是一個概述:http://www.scottw.com/loose-associations-activerecord – 2011-05-27 15:43:52
斯科特的博客文章轉移到http://dev.scottw.com/loose-associations-activerecord – drench 2013-10-28 14:57:28