調べても分からなかったので、どうやって調べるのか教えていただけますと幸いです。
適当な Rails のプロジェクトを作成し、コンソールから モデル名.instance_methods
および モデル名.methods
を調べるのが手っ取り早いかなと思います。
Module#instance_methods - Ruby 3.0.0 リファレンスマニュアル
Object#methods - Ruby 3.0.0 リファレンスマニュアル
集合の積演算(&
)を使えば絞り込みも可能です。
Array#& - Ruby 3.0.0 リファレンスマニュアル
--
■ 調べた結果
irb
1$ bundle exec rails c
2
3irb(main):001:0> User.methods & %i(save where update order)
4=> [:update, :order, :where]
5
6irb(main):002:0> User.instance_methods & %i(save where update order)
7=> [:save, :update]
--
・saveがクラスメソッドでない理由
上記の結果を見れば分かりますが、
User.methods
(クラスメソッド)に save
は含まれておらず、
User.instance_methods
(インスタンスメソッド)に save
は含まれています。
--
・updateがクラスメソッドの理由
これはちょっと悩みますね。
User.methods
と User.instance_methods
の両方に update
が含まれているので。
おそらく、出題者の意図としては『(インスタンスメソッドの存在を問わず)クラスメソッド(が存在するもの)を全て挙げてください。』だったのではないでしょうか。
ちなみに、クラスメソッド版の update
は以下のように第一引数に ID を指定して使います。
# インスタンス生成せずに update できる
# (`15` は更新対象の ID)
Person.update(15, user_name: "Samuel", group: "expert")
--
下記の問題文だけでどうやって判別しているのかわかりませんでした。
メソッド名のみで判別するのは不可能なので、どれがクラスメソッドでどれがインスタンスメソッドか暗記するしかありません。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/15 07:48