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