Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails ActiveRecord `.select`方法是否可以具有类似于`.where`的插值字符串?_Ruby On Rails_Activerecord - Fatal编程技术网

Ruby on rails ActiveRecord `.select`方法是否可以具有类似于`.where`的插值字符串?

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语句根据每个记录的字段使用不同的值,我们希望避免

ActiveRecord的
.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
将接收符号数组或字符串数组,但它不会替换这些字符串中的任何绑定参数。有关文档,请参见此处: