Ruby on rails 数组的未定义方法“%”

Ruby on rails 数组的未定义方法“%”,ruby-on-rails,ruby,postgresql,activerecord,Ruby On Rails,Ruby,Postgresql,Activerecord,来自控制器的代码+错误: 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 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'

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

您将数组传递给where,而不仅仅是数组。这意味着语句被设置为数组,但它希望字符串上有一个字符串%来进行字符串格式化,例如:hello%s%world=>hello world


您正在将一个数组传递给where,而不仅仅是一个数组。这意味着语句被设置为数组,但它希望字符串上有一个字符串%来进行字符串格式化,例如:hello%s%world=>hello world


这并不能回答你的问题,但我建议如果有,就改变!参数[:player_name].nil?&&!params[:player_name]。是否为空?如果参数[:玩家名称]。是否存在?基本上,object.blank?如果为零或为空,则返回true。你现在在吗?如果object.blank返回true?返回false。这些都是Rails方法,但看起来您正在使用Rails,所以我想我应该把它们扔掉。@MichaelStalker谢谢!我不知道礼物是什么?方法我肯定会用它。这并不能回答你的问题,但我建议如果有,就改一下!参数[:player_name].nil?&&!params[:player_name]。是否为空?如果参数[:玩家名称]。是否存在?基本上,object.blank?如果为零或为空,则返回true。你现在在吗?如果object.blank返回true?返回false。这些都是Rails方法,但看起来您正在使用Rails,所以我想我应该把它们扔掉。@MichaelStalker谢谢!我不知道礼物是什么?方法我一定会用的,真管用!我想我在另一个网站上看到过,但我猜他们错了。我以为%符号就是这么做的,但是这个语句的方式让我有点困惑。再次感谢!成功了!我想我在另一个网站上看到过,但我猜他们错了。我以为%符号就是这么做的,但是这个语句的方式让我有点困惑。再次感谢!
statement % values.collect { |value| connection.quote_string(value.to_s) }
conditions = []
conditions << ["lower(players.name) LIKE ?", "#{params[:player_name].downcase}%"]

  => [ ["lower(players.name) LIKE ?", "..."] ] 
conditions << ["lower(players.name) LIKE ?", "#{params[:player_name].downcase}%"]
conditions.push "lower(players.name) LIKE ?", "#{params[:player_name].downcase}%"