質問: railsチュートリアルの13.1.3の演習課題2: () > > 先ほどの演習課題で、データベース上に新しいマイクロポストが追加されたはずです。`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を見てもよくわからなかったためここで質問させてください。
回答: 4.2の時点で警告が出るようになっています。5.0ではそのままだったようですが、5.1でArgumentErrorが出るように変更されていますね。