質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

187閲覧

【メソッドの引数について】

takabeee

総合スコア19

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/01/08 15:05

教科書で分からないところがあったので質問させてください。
Viewで以下のようなリンクを書きました。

<li class="nav-item"><a href="<%= followings_user_path(@user) %>" class="nav-link <%= 'active' if current_page?(followings_user_path(@user)) %>">Followings <span class="badge badge-secondary"><%= @count_followings %></span></a></li>

これに対するコントローラのアクションは以下です。

def followings @user = User.find(params[:id]) @followings = @user.followings.page(params[:page]) counts(@user) end

ここで疑問に思ったのですが、followingsメソッドは引数がないのになぜ「followings_user_path(@user)」のように引数を渡しているのでしょうか?
この「(@user)」はどういう値を送信しているのですか?
基本的なことで申し訳ないです。。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

基本的なことで躓いてしまったこと、お詫びします。またこれから同じ疑問を持った人に対して、この問題の自己解決法を記入します。

まず、「followings_user_path(@user)」の「@user」はメソッドへの引数ではなく、URLの:idに対する指定です。rails routesでURIパターンを調べてみると「followings_user_path」は「/users/:id/followings」となっていることが分かります。この:idの部分に対してこの@userのidが入ります。当然@userはUserモデルのインスタンスなのでusersコントローラに遷移します。(rails routesでController#Actionを調べてみるとusers#followingsとなっています。ということはfollowingsメソッドに遷移します。)
紛らわしかったですが、followingsメソッドの@userとURLの@userは別のものと言うことになります。(入ってる内容は結果的に全く同じものです。)
followingsメソッドのparams[:id]はURLの:idを受け取ったものだと思います。

@user = User.find(params[:id])

によってもう一度@userを特定していると言うことです。
基本的なことですが、長々となってしまい申し訳ありません。

投稿2020/01/08 15:45

編集2020/01/08 15:53
takabeee

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問