【问题标题】:ActiveRecord Query Conversion from Rails 2 to Rails 4.2从 Rails 2 到 Rails 4.2 的 ActiveRecord 查询转换
【发布时间】:2015-07-10 10:32:37
【问题描述】:

我习惯了 Rails 2 并且有一个现有的查询:

@players = Player.find(
  :all,
  :select => 'players.*, positions.name AS "position_name"',
  :joins => 'LEFT JOIN positions ON positions.id = players.position_id',
  :conditions => ['status IN (?, ?, ?, ?)', 'd', 'i', 'n', 'u']
)

我正在尝试编写 Rails 4 等效项,但收到错误 unexpected ')', expecting keyword_end,这是查询的右括号。

@players = Player
  .select('players.*, positions.name AS "position_name"')
  .joins('LEFT JOIN positions ON positions.id = players.position_id')
  .where(status: ['d', 'i', 'n', 'u'])
)

我已尝试阅读文档,但看不出哪里出错了。

另外,如果这是使用 params 散列而不是硬编码值,上述内容是否不会受到 sql 注入的影响,如果是这样,如何编写它以使用第一个 Rails 2 查询中的占位符?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4.2


    【解决方案1】:

    删除最后一个);这是新查询的结构方式的额外内容。

    @players = Player
      .select('players.*, positions.name AS "position_name"')
      .joins('LEFT JOIN positions ON positions.id = players.position_id')
      .where(status: ['d', 'i', 'n', 'u'])
    

    在没有新行的情况下将被视为如下:

    @players = Player.select('players.*, positions.name AS "position_name"').joins('LEFT JOIN positions ON positions.id = players.position_id').where(status: ['d', 'i', 'n', 'u'])
    

    【讨论】:

    • 啊,不敢相信我错过了,谢谢你的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多