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

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

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

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

Q&A

解決済

1回答

348閲覧

rails urlを返す関数の意味がわかりません。

happy_teeth

総合スコア42

Ruby on Rails 5

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

0グッド

0クリップ

投稿2018/07/15 05:24

編集2018/07/17 14:38

まずViewです。

ruby

1 <% %i(index of_today).each do |action| %> 2 <li class='nav-item'> 3 <%= plan_items_nav_link(action) %> 4 </li> 5 <% end %>

問題の関数のヘルパーです。

ruby

1 ACTION_LABEL_MAP = { 2 index: '予定表', 3 of_today: '今日の予定表' 4 } 5 6 def plan_items_nav_link(action) 7 label = ACTION_LABEL_MAP[action] 8 url = (action == :index ? :plan_items : [ action, :plan_items ]) 9 10 link_to label, url, class: html_classes.join(' ') 11 end

この関数plan_items_nav_linkの中の

ruby

1 url = (action == :index ? :plan_items : [ action, :plan_items ])

この行が何をしているか教えていただけますか?
この関数は、link_to メソッドを返し、ここでは、そのurlを決定しています。

3項演算子はわかります。
url には
action == :index が条件
それが真のときは、
:plan_items
を代入
そうでないときは(偽の時)
** : [ action, :plan_items ])**
を代入。
####この偽のときの配列を渡している理由がわかりません。??

plan_itemsコントローラなので
真の時
:plan_items
を渡すのはわかります。
####アドレス。-画面はこうなります。予定表ボタンが押されてリンク先に遷移しています。
イメージ説明

つまり予定表ボタンが押された時

####偽のときは
w300
イメージ説明
そもそもactionは引数。
####:plan_itemsはどこから来たハッシュ?の値なのか?
routesファイルです。

ruby

1 resources :plan_items do 2 get :of_today, on: :collection 3 end

ネストしています。
すみませんが、よろしくおねがいします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Railsの機能で、polymorphic urlというやつです。

完全な説明ではないですが、こんな記事を見つけました。

Rails でリンクパスを生成する方法色々・・とRails console で 生成される path を確認したい時

正式なドキュメントはこちらを見てください。(英語です)

[ action, :plan_items ]index_plain_items_pathof_today_plain_item_pathになります。

余談ですが、通常nested resourcesな時に力を発揮する仕組みであって、ご提示のコードのような使い方はあまり見かけませんね…

投稿2018/07/26 17:27

takumiabe

総合スコア661

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

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

happy_teeth

2018/09/10 03:50

返事遅れて誠にスミマセン。 しばらく見ていたのですが、やはり特殊なケースなのかと、あきらめていました。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問