モデルクラスの定義が示されていないので推測がだいぶ混じりますが,恐らくこうだろう,ということを書きます。
テンプレートの
ですが,<%= と %> の間には 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 はそれに基づいて生やされたメソッドですね。