Rails,在has_many关联中查找具有多个日期的对象

时间:2011-01-12 08:27:35

标签: ruby-on-rails ruby has-many belongs-to

我对Rails很陌生,我遇到的问题描述如下:

首先,有一张有房子的桌子。 这些房屋有多个与has_many相关的日期:日期

其次是有日期的表格。 日期有关联belongs_to:house

现在,在搜索中,用户可以选择开始日期和结束日期。 而我想要做的是搜索每个房子的日期,并检查它们是否在开始日期和结束日期之间。如果一个或多个日期在开始/结束日期之内,则需要找到它。

这是我搜索房屋以寻找其他标准的条件:

parameters.push( [ params[:house_category_id], "houses.house_category_id = ?" ] );
parameters.push( [ params[:province_id], "houses.province_id = ?" ] );

我创建了一个使用这些参数创建有效条件的方法。

请告诉我,如果不够清楚,请说明有点难以解释。

我已经尝试过搜索这个了,但除了带答案的页面之外,它还有我所有其他页面。

由于

2 个答案:

答案 0 :(得分:0)

不确定我是否理解您的问题,但根据我的理解,您可以使用以下方法获得所需的结果:

res = House.find(:all, :select => 'distinct houses.*', :joins => "INNER JOIN dates ON dates.house_id = houses.id", :conditions => "dates.date < '2011-01-12' AND dates.date > '2011-01-11'")

其中'2011-01-12'&amp; '2011-01-11'是用户选择的日期。

如果您正在寻找或发布更多详情,请告诉我。

答案 1 :(得分:0)

现在我脑子里浮现出另一个问题,但我不知道这是否可能...... 如果你忘记了这种情况的从 - 到,我是否有可能检查这种类似的关联:

房子有2个日期。

用户选择2个日期。

现在我只想选择这两个日期对应的房子..

像这样:

@houses = House.find(:all, :select => 'distinct houses.*', :joins => "INNER JOIN dates ON dates.house_id = houses.id", :conditions => "dates.date = '2011-01-12' AND dates.date = '2011-01-11'")

我尝试了上面的代码并获得了这样的SQL:

SELECT distinct houses.* FROM `houses` INNER JOIN dates ON dates.house_id = houses.id WHERE (dates.date = '2011-01-15' AND dates.date = '2011-01-22')

但它似乎不起作用,这在单个查询或单个find()中是否可行?