未定义的方法`find_all_by_X'
undefined method `find_all_by_X'
目前正在维护一些旧的 Ruby 服务器,日志中出现以下错误:
NoMethodError (undefined method `find_all_by_X_ID' for #<Class:0x00000005555555>):
app/controllers/some_controller.rb:10:in `buggy_function'
查看bug函数代码中的错误行是这样的:
Hash[S.find_all_by_X_ID(TaskRun.select(:x_id).uniq.where(y_id: @y.Y_ID).map(&:x_id)).map { |s| [s.S_IDENTIFIER, s.X_ID] }]
坦率地说,我是 Ruby 的新手,想知道如何最好地实施此 find_all_by_X
查询,以及为什么它看起来应该是自动的(因为它必须处理模型组件)。
我们正在开发 Ruby 版本 2。
似乎 find_all_by
在 Rails 4 中被弃用了 ...
内部 Rails 使用 method_missing 实现了类似 find_all_by_x_id
的方法(该方法实际上是通过元编程动态定义的)...但您不必为您的用例。
根据您的代码,如果我们将 x_ids 列表提取到一个变量中:
x_ids = TaskRun.select(:x_id).uniq.where(y_id: @y.Y_ID).map(&:x_id)
然后您需要重写这一行:
S.find_all_by_X_ID(x_ids)
您可以将其重写为:
S.where(x_id: x_ids)
见
目前正在维护一些旧的 Ruby 服务器,日志中出现以下错误:
NoMethodError (undefined method `find_all_by_X_ID' for #<Class:0x00000005555555>):
app/controllers/some_controller.rb:10:in `buggy_function'
查看bug函数代码中的错误行是这样的:
Hash[S.find_all_by_X_ID(TaskRun.select(:x_id).uniq.where(y_id: @y.Y_ID).map(&:x_id)).map { |s| [s.S_IDENTIFIER, s.X_ID] }]
坦率地说,我是 Ruby 的新手,想知道如何最好地实施此 find_all_by_X
查询,以及为什么它看起来应该是自动的(因为它必须处理模型组件)。
我们正在开发 Ruby 版本 2。
似乎 find_all_by
在 Rails 4 中被弃用了 ...
内部 Rails 使用 method_missing 实现了类似 find_all_by_x_id
的方法(该方法实际上是通过元编程动态定义的)...但您不必为您的用例。
根据您的代码,如果我们将 x_ids 列表提取到一个变量中:
x_ids = TaskRun.select(:x_id).uniq.where(y_id: @y.Y_ID).map(&:x_id)
然后您需要重写这一行:
S.find_all_by_X_ID(x_ids)
您可以将其重写为:
S.where(x_id: x_ids)
见