首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未定义数组的方法"%“

未定义数组的方法"%“
EN

Stack Overflow用户
提问于 2012-07-24 02:49:10
回答 1查看 2.8K关注 0票数 1

来自Controller +Error的代码:

代码语言:javascript
复制
def search_conditions
    conditions = []
    if !params[:player_name].nil? && !params[:player_name].empty?
      conditions << ["lower(players.name) LIKE ?", "#{params[:player_name].downcase}%"]
    end
    conditions
end

def index
    @games = Game.joins([:player_one, :player_two]).where(search_conditions)
end

undefined method `%' for ["lower(players.name) LIKE ?", "test%"]:Array
Stack Trace:
activerecord (3.2.6) lib/active_record/sanitization.rb:121:in `sanitize_sql_array'
activerecord (3.2.6) lib/active_record/sanitization.rb:28:in `sanitize_sql_for_conditions'
activerecord (3.2.6) lib/active_record/relation/query_methods.rb:324:in `build_where'
activerecord (3.2.6) lib/active_record/relation/query_methods.rb:136:in `where'
app/controllers/game_controller.rb:5:in `index'

查看堆栈跟踪,我搜索了活动记录源,并能够在sanitize_sql_array方法中找到导致问题的行:

代码语言:javascript
复制
statement % values.collect { |value| connection.quote_string(value.to_s) }

现在,我对ruby的了解还不够多,无法确切知道这行代码是做什么的。我最初认为它与字符串中的百分号有关,但删除它仍然会导致相同的错误。我甚至还尝试通过创建多维数组来完全构造字符串,但仍然得到相同的错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-24 03:05:33

您正在向where传递一个数组数组,而不仅仅是一个数组。这意味着statement被设置为一个数组,但它需要一个字符串(字符串上的%进行字符串格式化,例如:"hello %s" % "world" => "hello world")。

代码语言:javascript
复制
conditions = []
conditions << ["lower(players.name) LIKE ?", "#{params[:player_name].downcase}%"]

  => [ ["lower(players.name) LIKE ?", "..."] ] 

更改:

代码语言:javascript
复制
conditions << ["lower(players.name) LIKE ?", "#{params[:player_name].downcase}%"]

至:

代码语言:javascript
复制
conditions.push "lower(players.name) LIKE ?", "#{params[:player_name].downcase}%"
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11618567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档