0

我已将活动记录从 3.2.12 更新到 4.1.4。因此,我也将 activesupport 从 3.2.12 更新到 4.1.4。现在,当我进行数据库查询(h2-data base)时,我无法使用

 mrs = MeasurementResultSample.find_by_duration_and_measurement_result_id(duration, id)

我只能用

mrs = MeasurementResultSample.where(:duration => duration, :measurement_result_id => id).first

我已经从 1.2.9 升级到 1.3.9 的 activerecord-jdbch2-adapter

如何使用一个或多个字段使我的“find_by”方法再次起作用?

感谢您的任何提示!

更新:实际上,find_by 正在工作,但我必须检查该表是否存在,该方法是否存在?不起作用的是 find_last_by... 或 find_all_by... 或 find_first_by... 。

4

2 回答 2

0

据我了解,Rails 正在远离某些“神奇”方法名称,因为它们所基于的“method_missing”性能不佳。

但是,find_by有效。因此,您可以使用以下方法重新处理您的查询:

mrs = MeasurementResultSample.find_by(duration: duration, measurement_result_id:, id)

有趣的是,幕后的实现是:

def find_by(*args)
  where(*args).take
end

http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-find_by

编辑:

有一个包含 Rails 4 不推荐使用的查找器的 gem:

https://github.com/rails/activerecord-deprecated_finders

令人困惑的是,它声明find_by...方法没有被弃用。但是,如果您在 Rails 之外更新了 ActiveRecord,它可能会有所帮助。

如果没有,您可以随时查看 Rails 3 ActiveRecord 代码并移植相关方法。

于 2014-08-25T15:19:46.443 回答
0

感谢 A Fader Darkly!我终于开始将代码移植到 activerecord 4.1.4。我选择将查找器方法更改为 where(...)。

在这里,我也找到了一些信息what-s-new-in-active-record-rails-4。这是最干净的方式。我注意到,我必须使用存在?在某些情况下确保表不为零的方法。在使用屈折变化之前(在 3.2.12 中)我不必这样做。

于 2014-08-26T14:00:36.923 回答