我有一系列条件我会传递到where(),条件是一次添加一个,例如
conditions[:key] = values[:key]
...
search = ModelName.where(conditions)
适用于所有我想要与之比较的人#39; ='但是我想添加一个'< ='条件到数组而不是' ='比如
conditions[:key <=] = values[:key]
当然不会起作用。有没有办法使这项工作,所以我可以结合&#39; =&#39;条款与&#39;&lt; =&#39;相同条件数组中的子句?
答案 0 :(得分:1)
一种方法:
您可以在<=
子句中使用where
,如下所示:
User.where('`users`.`age` <= ?', 20)
这将生成以下SQL:
SELECT `users`.* FROM `users` WHERE (`users`.`age` <= 20)
对于多种情况,您可以这样做:
User.where('`users`.`age` <= ?', 20).where('`users`.`name` = ?', 'Rakib')
以下是where
子句中多个条件的另一种方式:
User.where('(id >= ?) AND (name= ?)', 1, 'Rakib')
您可以在AND
OR
子句中添加任意数量的ActiveRecord
where
条件。我只是用2表示保持简单。
有关详情,请参阅Ruby on Rails Official Documentation了解Array Conditions
。
Array Conditions
子句中如何使用where
的另一个细微变化:
conditions_array = ["(id >= ?) AND (name = ?)", 1, "Rakib"]
User.where(conditions_array)
我认为,这个符合您的确切要求。
答案 1 :(得分:1)
你可以使用arel。
conditions = {x: [:eq, 1], y: [:gt, 2]}
model_names = ModelName.where(nil)
conditions.each do |field, options|
condition = ModelName.arel_table[field].send(*options)
model_names = model_names.where(condition)
end
model_names.to_sql --> 'SELECT * FROM model_names WHERE x = 1 and y > 2'