モデルクラスの定義が示されていないので推測がだいぶ混じりますが,恐らくこうだろう,ということを書きます。
テンプレートの
ですが,<%=
と %>
の間には Ruby の式を書くのでしたね。
従って,
は Ruby の式です。
最初の message
は,形からすると,①ローカル変数の参照か,②引数の無いメソッド呼び出し,のどちらかです。
このコードだけでは判定できませんが,Rails の部分テンプレートでファイル名が _message.html.erb
というあたりからして,まあ①だろうな,と思いました。
そうだとすると,この部分テンプレートを呼び出すところで,ローカル変数 message
の指定があるはずです。
また,Rails の典型的なコードだとすると,この message
というローカル変数には,Message
というモデルクラスのインスタンスが代入されているだろうな,と思います。
次の user
ですが,message
のあとにピリオドで繋いでいますので,これはメソッド呼び出しですね。
つまり,Message
クラスのインスタンスの user
メソッドを呼んでいます。
ま,典型的なケースとして,この user
メソッドは Message
クラスのインスタンスメソッドです(可能性としてはそうでないこともあります)。
どうして Message
クラスに user
というインスタンスメソッドがあるのでしょうか。
いろいろな可能性がありますが,ありがちなケースとして以下の二つがまず浮かびます。
①Message
モデルで belongs_to :user
している
②Message
モデルが user
という属性を持っている
①のケースでは,User
というモデルクラスがあって,それに紐付けるための user_id
という整数型の属性を Message
が持っているんですね。そして,まあ例えば
class Message < ApplicationRecord
belongs_to :user
end
みたいになってると。で,この belongs_to :user
という記述によって,Message
クラスに user
というメソッドが生えるわけです(ココ大事)。
このメソッドの返り値は User
クラスのインスタンスです。
②のケースは,言い換えれば Message
モデルに対応して,データベースに messages
というテーブルがあり,そのテーブルに user
というカラムがある,ということですね。ActiveRecord の賢い働きにより,対応するテーブルに user
というカラムがあればモデルクラスに user
というメソッドが生えます(ココ大事)。
さて,ここでは,おそらく①だろうと当たりをつけて先に進みましょう。
という式を検討しているのでした。
ここまでの推測が全部当たっているとすると,message.user
の返り値は User
のインスタンスです。
次の .name
は,その返り値に対して name
メソッドを呼んでいることになります。
こんな風に,「メソッドの返り値に対してさらにメソッドを呼び……」という連鎖を「メソッドチェーン」と言います。
おそらくは User
クラスに対応する users
テーブルがあって,そこに name
というカラムがあるのでしょう。
User
のインスタンスメソッド name
はそれに基づいて生やされたメソッドですね。