【问题标题】:Rails: Finding models with missing has_one recordsRails:查找缺少 has_one 记录的模型
【发布时间】:2012-12-11 04:36:51
【问题描述】:

如果模型User has_one Profile,有没有一种简单的方法可以在没有自定义查询(例如NOT User.where('profile_id IS NULL'))或在应用程序中处理的情况下找到所有没有个人资料的用户?

由于 Rails 已经知道 User 和 Profile 之间的关联,我不想重述它。我想保持这个干燥。模型之间的实际连接比这个简单示例(使用键和类名)更复杂,并且将来可能会发生变化。

【问题讨论】:

  • 一种查询User 模型表而不构建Rails 本身不提供的查询的方法?这不是很清楚。
  • 为了便于阅读,您所做的任何自定义查询都可以封装到 scope 中。
  • scope :without_profile, where(profile_id: nil)

标签: ruby-on-rails ruby-on-rails-3 activerecord


【解决方案1】:

正如@tadman 和@antonk 已经说过的,您可能想使用scope

scope :without_profile, where(profile_id: nil) 

编辑: 要回答@David Mauricio 的问题:您可以通过调用User.without_profile 来使用它,以使用nil :profile_id 返回所有用户的AR 关联。

@DriverDan :那我真的不确定你要什么。再问一个更详细的问题,我们可以尝试回答!

【讨论】:

  • 我接受这个,因为它是我简单示例的合理解决方案。但是,当两个模型之间的关系比较复杂时,例如使用:primary_key,我认为它不是正确的解决方案。这将需要在我想要避免的范围内重新声明 JOIN。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-04
  • 1970-01-01
  • 1970-01-01
  • 2015-05-11
  • 2015-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多