Ruby on rails 包括链接在何处
我有一个奇怪的问题。我想在调用includes之后在我的控制器中链接一些where子句,但它只有在未链接时才起作用。下面是不起作用的代码(我想做的): 这是可行的(但我需要if语句):Ruby on rails 包括链接在何处,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个奇怪的问题。我想在调用includes之后在我的控制器中链接一些where子句,但它只有在未链接时才起作用。下面是不起作用的代码(我想做的): 这是可行的(但我需要if语句): 有什么想法吗?当触发时,all将执行SELECT*from events 您可以这样设置: query = Event.includes(:prices) if params.has_key?("price_min") && params["price_min"].length > 0 t
有什么想法吗?当触发时,
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
执行
注意:在控制台中运行此操作不会给您带来预期效果,因为REPL的
打印
将导致在每个点执行查询。哦,这很有意义!刚刚意识到我的其他参数有@events=@events.where(…)。看起来按照你描述的方式设计会更有效率。非常感谢。
@events = Event.all.includes(:prices).where("prices.price >= ? AND prices.price IS NOT NULL", params["price_min"])
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