【问题标题】:Rails how to get an array parameter single quoted and comma seperated in a query.Rails 如何在查询中获取单引号和逗号分隔的数组参数。
【发布时间】:2011-07-28 23:58:35
【问题描述】:

Rails 2.35

我可能是错的,但我认为参数中有一个数组,rails 应该在使用如下查询时分隔数组。我知道我可以将参数分解为单引号和逗号分隔的字符串。我只是好奇这是否可以由 Rails 自动完成,如果是这样,我将如何去做。谢谢你

正在发送的参数:

Parameters: {"method"=>:get, "id"=>["3", "1", "4"]}

我正在使用的控制器中的 SQL 语句:

sql = "SELECT user.user_alias from users " +
"where user.id in (#{params[:id]}) " +
"AND user.user_alias is NOT NULL "
aliases = User.find_by_sql(sql)

Rails 输出的 SQL 字符串(IN 语句中的查询结果都是 '314):

SELECT User.user_alias 
from lte_users
where user.id in (314) 
AND user.user_alias is NOT NULL 

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    从不,从不,在 SQL 查询中进行字符串连接,因为有人可能会使用它对您的 web 应用执行 SQL 注入 攻击。

    你应该这样做:

    sql = %Q{SELECT user.user_alias from users
      where user.id in (?) 
      AND user.user_alias is NOT NULL }
    aliases = User.find_by_sql([ sql, params[:id] ])
    

    【讨论】:

      【解决方案2】:

      除非您迫切需要不为返回的少数记录创建 ActiveRecord 对象的性能,否则我会习惯性地这样做:

      aliases = User.all(
        :conditions => ['id IN (?) AND user_alias IS NOT NULL', params[:id]
        ).map(&:user_alias)
      

      【讨论】:

        【解决方案3】:

        试试:

        where user.id in (#{params[:id].join(',')})
        

        【讨论】:

          猜你喜欢
          • 2019-10-29
          • 1970-01-01
          • 1970-01-01
          • 2013-09-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多