【发布时间】:2017-12-13 09:13:22
【问题描述】:
我在 Rails 5 上。
我必须处理一个包含多个相同 where 子句的非常复杂的查询:
::AllocatedBudget.joins(:account_code, :budget, account_code: [:place],
budget: [:fiscal_year, :budget_state])
.where(immeuble: { id: place.id })
.where(situation_budget: { codesituation: ['A', 'V']})
.where(plan_comptable: { supprime: 'false' })
.where(budget: { supprime: 'false'})
.where(situation_budget: { supprime: 'false' })
.where(budget_previsionnel: { supprime: 'false' })
.where(exercice_comptable: { supprime: 'false' })
首先,您必须知道我的模型连接到一个名称难看的旧数据库。我注意到 ActiveRecord 需要自定义名称而不是模型名称来执行查询。我不知道为什么,但它只能这样工作......如果有人能解释它会很好;)
我真正的问题是:我可以用更好的方式来写它吗?有很多次相同的where子句“supprime = 'false'”。
非常感谢! :)
【问题讨论】:
-
好吧,您可以将所有
where方法条件合并为一个。您也可以将{ supprime: 'false' }替换为在调用之前定义的具有相同值的变量。 -
@potashin where 子句更好吗?会更难阅读,有什么好处吗?
-
可以在模型中定义范围并在此处使用它们。
-
potashin 你是对的,我可以这样做并将 {supprime: false } 放在一个 var 中并稍微澄清语法:) thx ! @JagdeepSingh 是的,“连接”和所有“位置”可能是一个很大的范围。我试试
标签: mysql ruby-on-rails activerecord