如何使用ActiveRecord比较列?

时间:2014-08-16 18:41:35

标签: ruby-on-rails ruby activerecord

在我的应用程序中,用户可以加入Houses。

Houses表中是一个整数类型的bedrooms列。

鉴于

h = House.new
h.users

我们可以看到所有加入特定住宅的用户。

一旦h.users == h.bedrooms,我想从房屋#index view中删除那所房子。

HousesController的索引操作目前如下所示:

  def index
    @houses = House.all
  end

House.rb

has_many :bookings
has_many :users, through: :bookings

为了达到我想要的效果,我应该将@houses设置为什么?

2 个答案:

答案 0 :(得分:0)

为House模型中的用户数添加计数器缓存

然后在HousesController中

def index
    @houses = House.where("users_count < ?",bedrooms)
  end

答案 1 :(得分:0)

这取决于关联的定义方式,即:用户和预订之间是否存在 1对1 关系?

如果是这样的话,那就行了:

class User
  has_many :bookings
  has_many :houses, through: :bookings
end

# column 'user_id', integer
# column 'house_id', integer
class Booking
  belongs_to :user
  belongs_to :house
end

# column 'bedrooms', integer
class House
  has_many :bookings
  has_many :users, through: :bookings


  def is_full?
    bedrooms <= bookings.count
  end
end