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

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

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

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

SCSS

SCSSは、SassのCSSメタ言語です。Webページのスタイルを指定するCSSを効率的に記述することができます。ネストと呼ばれる入れ子構造で記述するため、CSSの全体の記述量を減らせる点が特徴です。さらに変数も利用できるため、変更や修正の際に少ない作業量で対応することもできます。

Q&A

解決済

1回答

354閲覧

レイアウトを決定する仕組みのカスタマイズについて

inumaru3

総合スコア10

Ruby on Rails 6

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

SCSS

SCSSは、SassのCSSメタ言語です。Webページのスタイルを指定するCSSを効率的に記述することができます。ネストと呼ばれる入れ子構造で記述するため、CSSの全体の記述量を減らせる点が特徴です。さらに変数も利用できるため、変更や修正の際に少ない作業量で対応することもできます。

0グッド

0クリップ

投稿2021/09/30 16:20

###実現したいこと
paramsオブジェクトを使用して、ソースコード5行目(staff|admin|customer)いずれかをマッチさせてコントローラの名前を取得できるようにしたいのですが、マッチしているのか分かりません。

現状としてブラウザに表示されるためには、
app/views/layouts/配下のcustomer.html.erbの名称と、ソースコード8行目を合わせる必要があり、名称にミスマッチがあると、『Missing template』とテンプレートファイルが無いと怒られます。

customer.html.erbの名称と、ソースコード8行目を合わせなくても、ブラウザに表示させるためにはどのようにすればよろしいでしょうか。

###該当するソースコード
app/controllers/application_controller.rb

rb

11class ApplicationController < ActionController::Base 22 layout :set_layout 33 44 private def set_layout 55 if params[:controller].match(%r{¥A(staff|admin|customer)/}) 66 Regexp.last_match[1] 77 else 88 "customer" 99 end 1010 end 1111end

他に必要なファイルがございましたら、ファイル名を仰っていてだけますと助かります。
お手数ですが、ご教示いただけないでしょうか。
よろしくお願い致します。

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

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

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

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

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

m.ts10806

2021/09/30 22:53

ルーティングも提示してください。 ただ、ルーティングとメソッド名とそろっていれば指定しなくてもそれにあわせたテンプレートは呼び出せるでしょうけど、結局、例えばメソッド名やルート名とは合ってなくてはいけません。 https://railsguides.jp/layouts_and_rendering.html 独自に作りこんでいて「任意のテンプレートを呼びだす」のであれば現状以外はないのでは。
guest

回答1

0

ベストアンサー

layoutに"customer" を使う と宣言しているのですから、staff|admin|customer以外の場合に「customer.html.erbの名称と、ソースコード8行目を合わせなくても、ブラウザに表示させる」方法はありません。

問題は if params[:controller].match(%r{¥A(staff|admin|customer)/}) が期待通りに動いているかどうか。
最後の/ が余分なきがします。

投稿2021/09/30 22:53

winterboum

総合スコア23567

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

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

inumaru3

2021/10/17 11:25 編集

回答遅れまして、申し訳ございません。 こちらの件ですが、 if params[:controller].match(%r{¥A(staff|admin|customer)/}) ↓ if params[:controller].match(%r{\A(staff|admin|customer)/}) Aの前に¥ではなく、\を使用することが正しいようです。 こちらに修正することで、それぞれ指定した(staff|admin|customer)いずれかもマッチさせてコントローラの名前を取得し、ブラウザに表示させることができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問