我有两个型号
class User < ActiveRecord::Base
has_many :deals
end
和
class Deal < ActiveRecord::Base
belongs_to :user
end
现在我想选择具有非空交易数组的所有用户(通过活动记录查询界面)。我想要这样的东西
User.select{|u| u.deals != []}
我知道它非常简单,但请帮助我,因为我需要它与will_paginate一起分页。
答案 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)