麻烦包括

时间:2015-04-13 07:06:15

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord

我需要构建一个查询来按两个条件(两个模型)选择记录:Branch(id)Plan(created_at)

我尝试了以下查询:

@branches = Branch.where(id: 2).includes(:plans).where("created_at > ?", 1.week.ago)
@branches = Branch.where(id: 2).includes(:plans).where(plans: { "created_at > ?", 1.week.ago })
@branches = Branch.includes(:plans).where(branches: { id: 2 }, plans: { "created_at > ?", 1.week.ago })

我有错误

  

语法错误,意外'}',期待keyword_end ..." created_at>   ?",1.week.ago})

我该如何解决?

3 个答案:

答案 0 :(得分:1)

{ "created_at > ?", 1.week.ago }不是正确的哈希语法,它应该在数组中:

[ 'created_at > ?', 1.week.ago ]

答案 1 :(得分:1)

只是阅读您的代码,问题在于hash

的语法不正确
{ "created_at > ?", 1.week.ago }

哪个应该是数组:

[ "created_at > ?", 1.week.ago ]

但是对于你的用例,我认为你需要这样的东西:

@branches = Branch.where(id: 2)
                  .joins(:plans)
                  .includes(:plans)
                  .where("plans.created_at > ?", 1.week.ago)

为了能够使用Plan的列created_atincludes是不够的 - 在这种情况下,错误将被抛出未知的plans。这就是您需要指定joins以正确构建整个查询的原因。

希望有所帮助!

祝你好运!

答案 2 :(得分:0)

这可能对你有用,

Branch.includes(:plans).where(["id = ? and plans.created_at > ?", 2, 1.week.ago])