未定义方法`find_all_by_X'

问题描述 投票:0回答:1

当前正在维护一些旧的Ruby服务器,并在日志中收到以下错误:

NoMethodError (undefined method `find_all_by_X_ID' for #<Class:0x00000005555555>):
  app/controllers/some_controller.rb:10:in `buggy_function'

当查看越野车功能代码中的错误行时,如下所示:

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。

ruby-on-rails ruby ruby-2.0 ruby-2.1
1个回答
0
投票

[似乎在Rails 4中不推荐使用find_all_by ...

[find_all_by_x_id在内部Rails中使用method_missing实现的方法(该方法实际上是通过元编程动态定义的……但是您不必为用例担心这一点。

就您的代码而言,如果我们将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)

请参见https://stackoverflow.com/a/23921890/2981429

© www.soinside.com 2019 - 2024. All rights reserved.