mysql - rails : Using named_scope which triggers a MySQL "in"

标签 mysql ruby-on-rails ruby select named-scope

问题:

我想运行一个会触发类似的查询

select * from users where code in (1,2,4);

使用 named_scope


我尝试了什么:

这是一个单一的代码:

named_scope :of_code, lambda {|code| {:conditions => ["code = ?", code]}}

我试过类似的东西

named_scope :of_codes, lambda {|codes| {:conditions => ["code in ?", codes]}}

并发送

user.of_codes('(1,2,4)')

它会触发 select * from users where code in '(1,2,4)' 由于额外的引号引发 MySQL 错误。

PS: 理想情况下我想发送 user.of_codes([1,2,4])

最佳答案

这只会发现而不会让您暴露于 SQL 注入(inject)攻击:

named_scope :of_codes, lambda { |codes|
  { :conditions => ['code in (?)', codes] }
}

User.of_codes([1, 2, 3])
# executes "select * from users where code in (1,2,3)"

如果你想更圆滑一点,可以这样做:

named_scope :of_codes, lambda { |*codes|
  { :conditions => ['code in (?)', [*codes]] }
}

然后您可以使用 Array(如上)调用它:User.of_codes([1, 2, 3]),或使用代码列表参数:User.of_codes(1, 2, 3)

关于mysql - rails : Using named_scope which triggers a MySQL "in",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3148478/

相关文章:

php - 在 PHP 中缓存?

php - rowCount WHERE AND OR 与 MySQL 和 PHP

PHP 将文件夹从 ftp 上的另一个位置复制到新目的地 ø

返回多个记录集的 MySQL 存储过程

ruby-on-rails - Rails Activerecord - 调用不同的行

ruby - 如何编写一个在安装 RubyGem 时调用的 Hook ?

ruby-on-rails - 在 rails 3.1 中使用 ajax 调用渲染局部 View

sql - Ruby on Rails where 关系查询

ruby-on-rails - rails中的相关协会

ruby-on-rails - Rack 前的 Ruby