选择所有记录都有非空的关联记录

时间:2014-03-17 10:20:52

标签: mysql postgresql activerecord ruby-on-rails-4 will-paginate

我有两个型号

class User < ActiveRecord::Base
  has_many :deals
end

class Deal < ActiveRecord::Base
  belongs_to :user
end

现在我想选择具有非空交易数组的所有用户(通过活动记录查询界面)。我想要这样的东西

User.select{|u| u.deals != []}

我知道它非常简单,但请帮助我,因为我需要它与will_paginate一起分页。

2 个答案:

答案 0 :(得分:0)

有很多方法可以实现这一点,但我的优先选择是在你的user.rb中编写范围,就像这样

class User < ActiveRecord::Base
  has_many :deals

  scope :with_deals, lambda{
    joins(:deals).uniq
  }
}

然后调用User.with_deals将仅返回具有非空交易的用户(并且您可以链接任何其他重新限制,因为它的关系)。因此,如果你使用will_paginate,那么在你的控制器中你可以调用:

User.with_deals.paginate(:page => params[:page])

或任何你需要的东西。

答案 1 :(得分:0)

我知道这不是一个好方法,但它对我来说只是添加我的答案也许它会帮助任何人

restaurants_ids = User.all.collect{|u| u.id if (u.role == "restaurant" && !u.deals.empty?)}
@restaurants = User.where(:id=>restaurants_ids).paginate(:page => params[:page], :per_page=>1)