今Controllerを作らずにViewsディレクトリ以下にあるディレクトリ、html.erbファイル全てを表示するというコードを書いております。厳密に言いますとコントローラーを書かないというのは無理だと思いますので、routesもcontrollerもなるべく最小限のコードで、表示するというコードを書いております。
しかしrenderメソッドがいまいち分からず、思うような挙動が出来ておりません。コードは以下の通りです。
#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 } #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されていることがわかります
しかしサーバーを立ち上げた後、localhost3000/の後にファイル名をそのまま打ち込むとテンプレートミッシングが起こる
今現在の状態、問題点を箇条書きで書くと、
・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のみを表示することに関してのリファレンスが相当に落ちてないことにビックリしておりました。
長々と書いてしまいましたが、全く解決できず頭を悩ませております宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/11 02:52