使用Rails 4.2.3更改where_values的行为,如何获取where_values的有效SQL?

时间:2015-10-06 13:23:18

标签: ruby-on-rails ruby activerecord arel

ActiveRelation个实例有where_values。在Rails 4.2.2和更早版本中的代码

class Post < ActiveRecord::Base
  scope :staff_picks, -> { where(staff_pick: true) }
end

puts Post.staff_picks.where_values[0].to_sql 

for Postgresql返回

"posts"."staff_pick" = 't'

这是正确的。

Rails 4.2.3打破了这种行为,相同的代码返回

"posts"."staff_pick" = $1

如何在Rails 4.2.3和4.2.4中获得相同的有效SQL?

1 个答案:

答案 0 :(得分:2)

这在Rails 4.2.3中有所改变,但是没有绑定的原始行为可以通过更新范围来获得使用AREL:

class Post < ActiveRecord::Base
  scope :staff_picks, -> { where(arel_table[:staff_pick].eq(true)) }
end

puts Post.staff_picks.where_values[0].to_sql # => "`posts`.`staff_pick` = 1" 

这也向后兼容Rails 4.1和Rails 3.2。