gpt4 book ai didi

ruby-on-rails - 数组的未定义方法 "%"

转载 作者:太空宇宙 更新时间:2023-11-03 18:25:36 25 4
gpt4 key购买 nike

来自 Controller 的代码 + 错误:

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) }

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

最佳答案

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

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}%"

关于ruby-on-rails - 数组的未定义方法 "%",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11618567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com