0

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

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

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

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

这些是我为其他条件搜索房子的条件:

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

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

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

我试过搜索这个,但它让我在所有其他页面上,除了有答案的页面..

谢谢

4

2 回答 2

1

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

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”和“2011-01-11”是用户选择的日期。

让我知道这是否是您要查找的内容或发布更多详细信息。

于 2011-01-12T10:47:08.267 回答
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() 中是否可能?

于 2011-01-12T16:13:10.850 回答