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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

739閲覧

選択してたタブの色を変更し、飛んだページ先でも固定

tomtom1

総合スコア168

Ruby on Rails

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2020/04/13 11:22

###実現したいこと
バーにあるアイコンを選択すると、そのページに飛ぶのだが、飛んだページ先で選択したアイコンの色を変更させたい。
下記のサイトを参考にしました。
https://teratail.com/questions/43177
上記のサイトでは、タブをクリックするとページ内でセクションに飛ぶという仕様だったため可能かとは思いますが、今回のページを更新する仕様では、クリックして変更した色が、ページ更新した瞬間に元に色に戻ってしまいます。
クリックした変色した色のまま、次のページ先でも固定させたいです。

###コード

view

1<ul class="header-menus"> 2 <li> 3 <%= link_to "/posts/new", :method => :get do %> 4 <i class="fa fa-plus header-icon-size"></i>New<% end %> 5 </li> 6 <li> 7 <%= link_to "/posts/index", :method => :get do %> 8 <i class="fas fa-list header-icon-size">リスト</i><% end %> 9 </li> 10 <li> 11 <%= link_to "/users/index", :method => :get do %> 12 <i class="fa fa-users header-icon-size"></i>ユーザー<% end %> 13 </li> 14</ul> 15

css

1.header-menus a { 2 font-size: 16px; 3 color: white; 4 transition: all 0.5s; 5} 6.header-menus a.current{ 7 color: red; 8 background:#FDF9F7; 9}

js

1$(document).ready(function(){ 2 $('.header-menus a').click(function(){ 3 $(this).addClass("current"); 4 }) 5})

お分かりの方、ぜひ宜しくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

方法は2つあります。
1)JSでclassをつけるのではなく、controllerから呼ばれた時にviewの処理でつけます。
例えば /posts/new から書き出すときは
<%= link_to "/posts/new", class="current" do %>
となるようにする。

2)link_to_unless_current をつかう。するとcurrentページは <a> でなくなるので、.header-menus a の時にred する

追記
全部にそう書いたら全部そうなります。/posts/new から来た時だけ

  • link_to "/posts/new" に classをつけ、以外にはつけない

様にするのです。
いくつか方法は有ります。一般的にはcontollerからどのlinkにどのclassをつけるか、の情報を渡すのですが、今回は元のアクションが違うのでそれを使う例を
<%= link_to "/posts/new", class=(action_name == 'new' ? 'current' : '') do %>

投稿2020/04/13 13:42

編集2020/04/13 23:06
winterboum

総合スコア23567

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

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

tomtom1

2020/04/13 15:49

ご回答ありがとうございます! 1)JSでclassをつけるのではなく、controllerから呼ばれた時にviewの処理でつけます。 →<%= link_to("/posts/new", class: "current") do %>のように記述しました。  こちらのバーはapplication/html.erbに記載のため、他の2つのリンクにもクラスをつけたところ、  全てのアイコンがredになってしまいました。  各Pageで、現ページのリンクにclassをつけるということでしたでしょうか?  application/html/erbで良い方法はございますでしょうか? 2)link_to_unless_current をつかう。 →概念は理解致しました。しかし、全てのリンクをlink_to_unless_currentに変更したところ、  リンクがうまく行きません。link_to_unless_currentについては、少しお時間ください。
tomtom1

2020/04/14 06:05

追記ありがとうございます!! <%= link_to "/posts/new", class=(action_name == 'new' ? 'current' : '') do %> 目に鱗でした。このような方法もあるのですね。本当勉強になります。 ちなみに、バーに"/users/index"と"/posts/index"のaction indexが二つある場合は可能ですか? action_name == 'post/index'という風に書くしか思いつかず、もちろんそれでは叶いませんでしたが..。 また、controller_name を取り入れても、他のページアイコンがredになってしまいできませんでした。
winterboum

2020/04/14 07:54

それはだめです。 そのような場合は link_to_unless_current を使うか、 controllerから「どのTABにclassをつけるかを @変数で渡す」などして処理します
tomtom1

2020/04/14 08:19

少し質問逸れるかもしれませんが.. どちらかのindexというアクション名を、indexsとかに、routesやcontrollerで変更してしてしまえばもっと楽なのかなと思ったのですが、 index、show,new...などの基本的なアクション名から変更するのは、何か問題は発生しますでしょうか?
winterboum

2020/04/14 09:57

それもありですが、TABを楽にするためだけに、でしたら薦めません。 「indexと違う命名?! 何が違うんだろう」と余分な思考が必要になります。 そういう手法では対応できないこともあるでしょうから、王道での実現を練習しておくことをお薦め
tomtom1

2020/04/15 09:31

時間がかかって申し訳ありません!自分で色々と試しており時間がかかってしまいました。 ありがとうございます、なるべく命名を基本のまま進めたいと思います。 1. link_to_unless_currentでは、リンクに飛ばない&アイコンではなく"/users/index"が表示されるため、×。 2. controllerからどのTABにclassをつけるかを @変数で渡す→Controller内の定義で、viewにある要素にクラスを加えれるということでしょうか?調べてもそのような情報が出てきません..。よろしければお教えください。 3. 下記のようにif文を活用できる場合、xxxxxはどのようになりますか? <% if xxxxx %> ←(もし表示ページがこちらのリンク先(current)と合致する場合という定義) <i class="fa fa-users header-icon-size 色が入るクラス"></i>ユーザー<% end %> <% else %> <i class="fa fa-users header-icon-size"></i>ユーザー<% end %> <% end %>
winterboum

2020/04/15 10:02

>1. link_to_unless_currentでは、リンクに飛ばない&アイコンではなく"/users/index"が表示されるため それはきっと書き方をまちがえてます。 調べてみて 2. どうでも書けますが、、、 例えば post/index から来る場合 def index にて  @link = "post/index としておいて <%= link_to "/posts/index", class=(@link == 'post/index' ? 'current' : '') do %> 3. 2の様にしても良いし、 if current_page?(controller: 'post', action: 'index')
tomtom1

2020/04/15 11:18

1. もう少し調べます! 2. application/html.erbに記述のバーのため、Controllerにある全アクションに変数を追加したいといけないため、まず3を挑戦したいと思います。 3. <% if current_page?(controller: 'post', action: 'index') %> という感じでよろしいですか?  No route matches {:action=>"index", :controller=>"post"}のエラーが出てしまいます..。  (ちなみに、routesに get 'users/index' => "users#index"はあります。)
winterboum

2020/04/15 11:22

rails routes を見せてください
tomtom1

2020/04/15 13:33

controllerは、 post → posts、 user→users でした!そして、無事解決致しました。 解決しただけでなく、知らないことを多く知るきっかけとなり本当に勉強になりました、 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問