我需要构建一个查询来按两个条件(两个模型)选择记录: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})
我该如何解决?
答案 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_at
,includes
是不够的 - 在这种情况下,错误将被抛出未知的plans
。这就是您需要指定joins
以正确构建整个查询的原因。
希望有所帮助!
祝你好运!答案 2 :(得分:0)
这可能对你有用,
Branch.includes(:plans).where(["id = ? and plans.created_at > ?", 2, 1.week.ago])