Ruby on rails ActiveRecord `.select`方法是否可以具有类似于`.where`的插值字符串?
ActiveRecord的Ruby on rails ActiveRecord `.select`方法是否可以具有类似于`.where`的插值字符串?,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,ActiveRecord的.where()查询方法支持如下插值: Book.where("author_id IS ? AND genre_id IS ?", author_id, genre_id) .select()方法是否支持类似的插值,或者我们是否需要使用标准的Ruby字符串插值(例如,“当流派id为{流派id},然后是2”) (这似乎是一个牵强的用例,但本质上我们是用一个计算字段来构建一个查询,例如,SUM()作为SUM,它通过case语句根据每个记录的字段使用不同的值,我们希望避免
.where()
查询方法支持如下插值:
Book.where("author_id IS ? AND genre_id IS ?", author_id, genre_id)
.select()
方法是否支持类似的插值,或者我们是否需要使用标准的Ruby字符串插值(例如,“当流派id为{流派id},然后是2”
)
(这似乎是一个牵强的用例,但本质上我们是用一个计算字段来构建一个查询,例如,SUM()作为SUM
,它通过case
语句根据每个记录的字段使用不同的值,我们希望避免将值硬编码到查询中。)
我对所有的答案都感兴趣,但这个特定的应用程序碰巧仍然在Rails 3.2.x上。您可以使用ActiveRecord::Sanitization中的一个:
def self.select_with_params(sql, params = [])
query = sanitize_sql_array([sql, params].flatten)
select(query)
end
并在AR链接中使用此方法:
User.where(name: 'name').select_with_params("name='%s' and group_id='%s'", "foo'bar", 4)
我想你必须依赖Ruby的字符串插值。ActiveRecord的
select
将接收符号数组或字符串数组,但它不会替换这些字符串中的任何绑定参数。有关文档,请参见此处: