【问题标题】:Rails, finding object with multiple dates in has_many assocationRails,在 has_many 关联中查找具有多个日期的对象
【发布时间】:2011-01-12 08:27:35
【问题描述】:

我是 Rails 的新手,遇到的问题描述如下:

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

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

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

这些是我根据其他条件搜索房屋的条件:

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

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

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

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

谢谢

【问题讨论】:

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


    【解决方案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”是用户选择的日期。

    如果这是您要查找的内容或发布更多详细信息,请告诉我。

    【讨论】:

    • 是的,太棒了!我知道它与那个连接的东西有关,但我就是找不到任何地方怎么做!非常感谢!
    【解决方案2】:

    现在我脑子里又冒出一个问题,但我不知道这是否可能.. 如果您忘记了这种情况的从头到尾,是否有可能像这样检查这种关联:

    一所房子附有 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( ) 中是否可能?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-12
      • 1970-01-01
      • 2015-09-04
      • 2014-11-04
      • 1970-01-01
      相关资源
      最近更新 更多