質問: [] Dir::glob(File.join(Rails.root.to_s, "/app/views/*/**")).map{|f| anonymous_dir << f.split("/").last } #views以下のディレクトリ、ファイルを取得 (anonymous_dir - exclude_dir).each do |dir| get "#{dir}" => "anonymous#index", :defaults => {:directory => "#{dir}"} end #取得したviewのみのファイルをゲット end ``` ``` #controller class AnonymousController < ApplicationController def index render "#{params[:directory]}/index" #routesで定義したdirectory/ファイル名をレンダリングする end end ``` 例えばviews以下にあるviews/league_table という名前のディレクトリを見ると、league_table以下にあるhtml.erbファイルが全てgetされていることがわかります ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/c463fcb33fd188fb2b50eaa2ad015e49.png) しかしサーバーを立ち上げた後、localhost3000/の後にファイル名をそのまま打ち込むとテンプレートミッシングが起こる ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/e455e95d02cd9ab18515baee1e1c59c1.png) 今現在の状態、問題点を箇条書きで書くと、 ・views以下のファイルは全てgetは出来ている ・サーバーを立ち上げた後、localhost3000/の後にファイル名をそのまま打ち込むとテンプレートミッシングが起こる(例:localhost3000/indeeex.html.erb) ・league_tableディレクトリにあるindex/html.erbファイルはそのファイルがあるディレクトリ名を打ち込むとrenderされる(例:localhost3000/league_table) ・エラー箇所を見るとrenderメソッドの書き方に問題がある(当然/indexをrenderしている時点で描画されないのは分かっているのですが、、、) ・このleague_tableディレクトリにある数個のファイルなら直接getすればいいかもしれないが、このディレクトリ以外にも多数のディレクトリ/ファイルがある 総じた質問と致しましては、renderメソッドに何をどう書けば各々のディレクトリの、html.erbファイルをレンダリングできるかということです。 viewのみを表示することに関してのリファレンスが相当に落ちてないことにビックリしておりました。 長々と書いてしまいましたが、全く解決できず頭を悩ませております宜しくお願い致します。
回答: まず最初の疑問ですが、 > > 今Controllerを作らずにViewsディレクトリ以下にあるディレクトリ、html.erbファイル全てを表示するというコードを書いております。 > > > どうしてRailsでこのような構成を取る必要があったのでしょうか。このような、DBを引かずに対応するビューだけ表示する、というような挙動であれば、Sinatraを使ったほうがすっきり書けると思います。 > > viewのみを表示することに関してのリファレンスが相当に落ちてないことにビックリしておりました。 > > > Railsには、コントローラーやルートの作り方に対しても、「Rails way」と呼ばれるような、標準的なやり方が確立されています。「複数のディレクトリを1つのコントローラーに流す」というのはそこから外れすぎて、逆に面倒となります。