以下のコードでviewsフォルダに入っているフォルダを全て1つのコントローラで呼び出せるようにしております。
#routes.rb Rails.application.routes.draw do exclude_dir = ["layouts", "boards","comments"] anonymous_dir = [] Dir::glob(File.join(Rails.root.to_s, "/app/views/*/")).map{|f| anonymous_dir << f.split("/").last } (anonymous_dir - exclude_dir).each do |dir| get "#{dir}" => "anonymous#index", :defaults => {:directory => "#{dir}"} end end
class AnonymousController < ApplicationController def index render "#{params[:directory]}/index" end end
このコードでは配列exclude_dirに入っている、ディレクトリ名以外のフォルダからこのAnonumousControllerコントローラーでviewを呼び出すことができます。
しかし問題はこの書き方ですと、各フォルダのindexアクションに紐付くindex.html.erbファイルしか呼び出すことができません。
views/type1/index.html.erb
viwes/type2/index.html.erb
といった具合です。
例えばtype1フォルダにindex2.html.erbやindex3/html.erbといったファイルを作成しても、当然ローカルでページを開いたらルーティングエラーが起きてしまいます。
そこで質問なのですが、この上記のルートとコントローラーのコードに対しどのようなコードを書けば、AnonymousControllerのみで"自由な名前"のviewを描画することができるでしょうか?つまりindex.html.erbと言う名前のviewファイル以外の名前のファイルも描画できるでしょうか。
もしくはlocalhost;3000/◯◯/index/3といったように同じindexアクションでもクエリやidによって描画するビューを変えるといったことができるでしょうか?
見よう見まねで作ったコードであるため仕組みがいまいち分かってない点がございます。
お手数をおかけしますが宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。