0

アクティブ レコードを 3.2.12 から 4.1.4 に更新しました。したがって、アクティブサポートも 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

1 つ以上のフィールドを使用する「find_by」メソッドを再び機能させるにはどうすればよいですか?

ヒントをありがとう!

更新: 実際には、find_by が機能していることが判明しましたが、メソッドが存在するテーブルが存在するかどうかを確認する必要がありました。機能しないのは、 find_last_by... または find_all_by... または find_first_by... です。

4

2 に答える 2

0

A Fader Darklyに感謝!ようやくコードをactiverecord 4.1.4に移植し始めました。finder メソッドを where(...) に変更することにしました。

ここでもいくつかの情報が見つかりました what-s-new-in-active-record-rails-4。それが最もクリーンな方法です。私は存在を使用しなければならなかったことに気付きましたか?場合によっては、テーブルが nil でないことを確認するメソッド。以前 (3.2.12) では、抑揚を使用してこれを行う必要はありませんでした。

于 2014-08-26T14:00:36.923 に答える
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 に答える