0

我有一个奇怪的问题。在调用包含后,我想在我的控制器中链接一些 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"])

有任何想法吗?

4

1 回答 1

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完成后执行。

注意:在控制台中运行它不会给您期望的结果,因为printREPL 将导致每个点的查询都执行。

于 2013-11-08T19:05:28.813 回答