rails5.1でfindの引数にActiveRecordを指定するとエラー
railsチュートリアルの13.1.3の演習課題2:
(https://railstutorial.jp/chapters/user_microposts?version=5.1#sec-user_micropost_associations)
先ほどの演習課題で、データベース上に新しいマイクロポストが追加されたはずです。
user.microposts.find(micropost.id)
を実行して、本当に追加されたのかを確かめてみましょう。また、先ほど実行したmicropost.id
の部分をmicropost
に変更すると、結果はどうなるでしょうか?
についてuser.microposts.find(micropost)
を実行すると、
ArgumentError: You are passing an instance of ActiveRecord::Base to `find`.
Please pass the id of the object by calling `.id`.
from /Users/username/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/activerecord-5.1.4/lib/active_record/relation/finder_methods.rb:461:in
`find_one'
となりエラーになります。
一方、Railsチュートリアルの解答を個人的に掲載しているサイト様によると、この演習課題の解答は
DEPRECATION WARNING: You are passing an instance of ActiveRecord::Base to `find`. Please pass the id of the object by calling `.id`. (called from irb_binding at (irb):4)
となりワーニングは出るものの引数にmicropost.id
を指定した時と同じくMicropostが
取得できる様です。
上述のサイト様ではバージョンが
Rails 5.0.1
ruby 2.3.0
で、私が行なっているチュートリアルではバージョンが
Rails 5.1.4
ruby 2.4.2
です。(RailsチュートリアルではRailsのバージョン5.1.2が指定されていますが敢えて2017/11時点の最新にしています)
Railsのバージョンが上がる際にfindの引数に関して仕様変更があったのでしょうか。
Githubを見てもよくわからなかったためここで質問させてください。