2015-09-26 23 views
5

Rails findメソッドは廃止されましたか?Railsは廃止されましたか?

昔は、find(1)はidで見つけるための好ましい方法でした。

find_by(id:1)の代わりfind(1)を使用する方が良いですか? Railsの4.2.1のよう

+8

'find'はActiveRecordの[Railsのガイド](http://guides.rubyonrails.org/active_record_querying.html#retrieving-a-single-object)で述べた非常に最初の方法ですので、私はそれを言うことは安全だと思いますそれはまだ行く方法です。 –

+3

RubyMineでは廃止予定ですか? 「はい」の場合は、バグが報告されています。https://youtrack.jetbrains.com/issue/RUBY-17979 –

答えて

4

どちらの方法(私の知る限りでは)廃止されました:私はそうは同じように使用するより良い/より新しい方法は、where()方法であると考えています。 findfind_by()の違いは、レコードが存在しない場合に返される値です。 23のIDを持つレコードが存在しない場合、これはあなたが得るものです:

Model.find(23) 
=> ActiveRecord::RecordNotFound: Couldn't find Model with 'id'=23 

それとも

Model.find_by(id: 23) 
=> nil 

find_byを使用して、あなたがどこに存在しないレコードのクエリを作っている場合はより寛容ですあなたは例外ではなくnilの値を取得することができます。

0

、そうではありません。 HereはAPIドキュメントです(正式ではありませんが、かなり良いです)。あなたが見ていたのはthis methodです。これはRails 3.0.0で廃止されました。

私は方法find_by()を使用したことがありません。

User.where(name: "Bob", email: "[email protected]") 
+1

'where'は良くない/新しいです。そして、それはあなたがまだ基本的に同じ方法であるにリンクを見つけることが非難されました。 'Base'から' FinderMethods'に移ったばかりです。 – Mischa

+3

'find_by(x)'は 'where(x).first'と等価であると考えることができます。 –

+0

.where()はオブジェクトの配列を返しますが、.find_by()はオブジェクトのインスタンスを返します。 –

1

おそらくあなたはActiveRecord::Base#findのような検索の廃止に言及された第1およびすべてのメソッドの賛成で廃止され(::最初の)とのfind(すべて)。この方法のための

サポートがレール3.2から削除されました。

あなたが使用した方法(ActiveRecord::FinderMethods#find)は非推奨されていません。

+1

FWIW、私は混乱が 'find_by_xxx'メソッドと考えています。私はそれらがRails 4では推奨されなくなったと思います。 –

関連する問題