我有两个AR模型:
class User < ActiveRecord::Base
set_primary_key 'email'
attr_readonly :email, :etag, :full_name, :google_id, :photo_url, :suspended
has_one :sip_user, inverse_of: :user, foreign_key: 'user_email'
end
class SipUser < ActiveRecord::Base
set_primary_key 'user_email'
attr_readonly :user_email, :sip_id, :sip_password,
:int_number, :ext_number, :mobile_number
belongs_to :user, inverse_of: :sip_user, foreign_key: 'email'
end从用户到SipUser的查询可以完美地工作:
User.find('email@company.com').sip_user返回正确匹配的SIP用户。
SipUser.find('email@company.com')也会返回正确的DB条目,但是
SipUser.find('email@company.com').user没有。但根据belongs_to :user,inverse_of::sip_user,它应该是这样的。
有什么想法吗?
发布于 2015-01-22 07:36:21
inverse_of与SipUser.find('email@company.com').user表达式没有任何关系。您在SipUser中的规范是这样的:对于这个sip_user,找到拥有user.email= sip_user.email的用户。这将导致此查询,您的inverse_of将有助于处理此案例sip_user.user.sip_user。如果没有inverse_of,它将使用两个查询,第一个查询查找sip_user的用户,第二个查询查找sip_user.user的sip_user。使用inverse_of,它将只发送第一个查询,并立即将sip_user作为sip_user.user.sip_user返回。所以它有助于提高数据库的效率。
https://stackoverflow.com/questions/21832875
复制相似问题