【发布时间】:2015-05-23 16:20:33
【问题描述】:
我正在寻找是否有更好的方法来编写以下 ActiveRecord 查询。
@posts = Post.select {|x| x.section.nil?}
我对这个查询所做的是搜索帖子,然后只选择不再关联部分且处于孤立状态的帖子。
有没有更好的方法来做到这一点?我正在使用 Rails 3.2。
非常感谢。
【问题讨论】:
-
Post.where(:section_id => nil) -
是的,这是行不通的,因为 :section_id 并不是真的为零。它实际上有一个孤立的部分 id。在上面的代码中,它通过检查该部分的 id 并返回包含不存在的部分的帖子来检查该部分是否存在。
-
试试这个
Post.includes(:section).where(:section => { :id => nil }) -
@Sontya,由于您使用的是包含(用于急切加载),因此您还必须添加对该表的引用才能对该包含的表进行查询。
-
是的。因此,如果 OP 在
Post模型has_many :section, :class_name => 'Post', :foreign_key => 'post_id'中有类似的东西,那么Post.includes(:section).where(section_posts: { id: nil })它应该可以工作
标签: ruby-on-rails ruby activerecord ruby-on-rails-3.2