プログラミング初心者の勉強メモ。

あくまでメモなので、自分が忘れそうなことだけちょこちょこ書いてます。

変数の定義はどこで?(パシャール編)

変数の定義先はどこ?

パーシャルファイル内に記載された、このコードの意味がわからなかった。

【_follow_button.html.erb】

<% unless current_user == user %>

概要としては、「current_userがuserではない時...」ということなんだろうけど、current_userとuserはどこで定義しているのだろうか。

current_user

これはSessionsHelper内で定義していた。

module SessoionsHelper

   def current_user

     @current_user || = User.find_by(id: session[:user_id])

   end 

session管理されたuser_idを使い、ユーザー情報を取得するメソッドが書かれていた。

要はログインするユーザー情報を取得する変数のようだ。

 

 

user

そしてuserはrenderで読み込むときにuserを定義していた。

【app/view/users/show.html.erb】(一部抜粋)

<%= render "relationships/follow_button", user: @user  %>

 

「renderでrelationshipsディレクトリ(フォルダ)内の_folllow_buttonファイルを読み込む際、変数userは@userと同じ扱いだよ」と記述していたではないか。

そして、このファイルはusers/show.html.erbなので、UsersControllerのshowアクション経由で表示されている。つまり、そこを見ればuser変数の内容が見れるということだ。

users#show

def show
#DBのidからUserを検索し、@user変数に代入
@user = User.find(params[:id])
end

 

まとめ

ということでパーシャル内の@が付いていない変数は、他の場所で定義されていることがわかった。今回でいうとパーシャルファイル内で出てきた@無しの変数(user)は、renderで読み込む際に定義されているはずなので、そこを注目してみよう。