我已将活动记录从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 ...。
答案 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),我没有必要这样做。