首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >inverse_of - belongs_to忽略Rails

inverse_of - belongs_to忽略Rails
EN

Stack Overflow用户
提问于 2014-02-17 23:23:58
回答 1查看 86关注 0票数 0

我有两个AR模型:

代码语言:javascript
复制
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的查询可以完美地工作:

代码语言:javascript
复制
User.find('email@company.com').sip_user

返回正确匹配的SIP用户。

代码语言:javascript
复制
SipUser.find('email@company.com')

也会返回正确的DB条目,但是

代码语言:javascript
复制
SipUser.find('email@company.com').user

没有。但根据belongs_to :user,inverse_of::sip_user,它应该是这样的。

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2015-01-22 07:36:21

inverse_ofSipUser.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返回。所以它有助于提高数据库的效率。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21832875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档