ruby-on-rails - 随着 Rails 4.2.3 改变 where_values 的行为,我如何获得 where_values 的有效 SQL?

标签 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 

对于返回的 Postgresql

"posts"."staff_pick" = 't'

这是正确的。

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

"posts"."staff_pick" = $1

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

最佳答案

这在 Rails 4.2.3 中确实发生了变化,但是可以通过更新范围以使用 AREL 来获得没有绑定(bind)的原始行为:

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。

关于ruby-on-rails - 随着 Rails 4.2.3 改变 where_values 的行为,我如何获得 where_values 的有效 SQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32971150/

相关文章:

ruby-on-rails - Carrierwave gem 在 Redmine v 2.x 插件中不起作用

ruby-on-rails - 无法加载此类文件 -- mysql2/2.4/mysql2 (LoadError) - windows

ruby-on-rails - Rails (ActiveRecord) 多对多表

ruby-on-rails - 对于 ActiveRecord 一对多关联,其中 :foreign_key option should I set?

ruby-on-rails - rails config/environments 'config' 在哪里定义?

ruby-on-rails - 如何从任何地方获取一些 lib 文件

javascript - Vue Multiselect 未提交 ID 值(Rails API)

ruby - 如何在 ruby​​ proc/lambda 中使用真正的局部变量

ruby - 使用 EventMachine 进行异步数据库访问

ruby-on-rails - 是否有任何与 Rails 模型集成的 ETL 工具?