我正在解决一个问题,我需要在一组现有条件中添加OR子句。当前条件是在方法的哈希中构建的,最后,它们在where子句中使用。这是一个简化的例子:
...
conds.merge!({:users => {:archived => false}})
Model.where(conds)
我正在尝试在当前条件集中添加OR子句,因此它类似于'(条件)或new_condition'。我想添加OR语句,而不将conds哈希的每个加法转换为字符串。那将是我的最后选择。我希望有人之前做过这样的事情(不使用Arel)。我似乎记得在Rails 2中有一种方法可以使用模型中的方法解析条件哈希(类似Model.some_method(conds)
的东西会产生where子句字符串。也许这只是添加OR子句的好选择对那个字符串。感谢任何想法。谢谢你的帮助!
答案 0 :(得分:0)
我找到了一种方法来做我需要的事情。我没有改变我正在构建的所有条件,而是使用sanitize_sql_for_conditions将条件解析为SQL。这是ActiveRecord中的私有方法,因此我必须在模型上放置一个方法以允许我访问它。这是我的模型方法:
def self.convert_conditions_hash_to_sql(conditions)
self.sanitize_sql_for_conditions(conditions)
end
因此,一旦我将条件转换为文本,我就可以将我的OR子句(以及相应的括号)添加到原始条件的末尾。所以,它会是这样的:
Model.where('(?) OR (model.type = ? AND model.id IN(?))', Model.convert_conditions_hash_to_sql(conds), model_type, model_id_array)