更新activerecord后,inflections不工作

时间:2014-08-25 15:04:34

标签: ruby activerecord activesupport inflection

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

 mrs = MeasurementResultSample.find_by_duration_and_measurement_result_id(duration, id)

我可以使用

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

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

如何使用一个或多个字段再次使用'find_by'方法?

感谢您的任何提示!

更新: 事实上,事实证明,find_by正在工作,但我必须检查表是否存在该方法存在吗?什么不行的是find_last_by ...或find_all_by ...或find_first_by ...。

2 个答案:

答案 0 :(得分:0)

据我所知,由于'method_missing'的表现不佳,Rails正在逐渐远离某些“魔法”方法名称。

然而,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代码并将相关方法移植到其中。

答案 1 :(得分:0)

感谢A推子黑暗!我终于开始将代码移植到activerecord 4.1.4。我选择将finder方法更改为where(...)。

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