コントローラからのコード+エラー:
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メソッドで問題の原因となっている行を見つけることができました。
statement % values.collect { |value| connection.quote_string(value.to_s) }
今、私はその行が何をしているのかを正確に知るのに十分なルビーについて知りません。最初は文字列のパーセント記号に関係していると思いましたが、それを削除しても同じエラーが発生します。多次元配列を作成して文字列を完全に作成しようとしたこともありますが、それでも同じエラーが発生します。