我有一个奇怪的问题。在调用包含之后,我想在我的控制器中链接一些where子句,但它只在没有链接的情况下才能工作。这是不起作用的代码(我想做的):
@events = Event.all.includes(:prices)
if params.has_key?("price_min") && params["price_min"].length > 0 then
@events.where("prices.price >= ? AND prices.price IS NOT NULL", params["price_min"])
end
这有效(但我需要if语句):
@events = Event.all.includes(:prices).where("prices.price >= ? AND prices.price IS NOT NULL", params["price_min"])
有什么想法吗?
答案 0 :(得分:1)
当all
触发时,SELECT * from events
将执行query = Event.includes(:prices)
if params.has_key?("price_min") && params["price_min"].length > 0 then
query = query.where("prices.price >= ? AND prices.price IS NOT NULL", params["price_min"])
end
@events = query.all
。
您可以这样设置:
all
这将动态构建查询,然后在print
完成后执行。
注意:在控制台中运行此功能将无法满足您的期望,因为REPL的{{1}}将导致每个点的查询执行。