2016-12-27 80 views
1

这就是模型的结构。获取第二级或第三级的子值has_many rails

User has_many :properties 

Property has_many :rooms 

Room has_many :bookings 

Booking belongs_to :Room 

booking有一个名为check_in表属性。因此,对于让所有预订客房的用户,我可以做以下

创建通过每个 房间的阵列和循环= []

然后为每个房间做下面的代码

这将为工作从房间查询

room.bookings.where("check_in == ?", Time.zone.now.beginning_of_day) 

我可以创建几个循环并获得结果。但是有没有一种有效的方法来做到这一点?

回答

2

查询时加入表格。

为了得到一套客房特定用户:

Room.joins(property: :user) 
    .where(
     users: { id: id_of_particular_user }, 
     bookings: { check_in: Time.zone.now.beginning_of_day } 
    ) 
+0

安德烈,你有一个博客分享你的知识/经验?你几乎在每一个铁轨/ activerecord相关的职位,你总是提供很好的解决方案 - )) – marmeladze

+1

@marmeladze谢谢你的赞美 - 我很高兴知道我的帮助!但我还是noob,只是一点点noob,比那些,我回答他们的问题:)但也许有一天,我会开始一个博客;) –

+0

上面运行代码 – Abhilash