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

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

ただいまの
回答率

90.76%

  • Ruby

    7033questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • Ruby on Rails

    6747questions

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

  • Ruby on Rails 4

    2381questions

    Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

  • Ruby on Rails 5

    1297questions

Ruby On Railsでviews以下のファイルの全てを表示させたいがrenderするとTemplate is missingが起こる

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 85

props

score 28

今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のみを表示することに関してのリファレンスが相当に落ちてないことにビックリしておりました。
長々と書いてしまいましたが、全く解決できず頭を悩ませております宜しくお願い致します。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

まず最初の疑問ですが、

今Controllerを作らずにViewsディレクトリ以下にあるディレクトリ、html.erbファイル全てを表示するというコードを書いております。

どうしてRailsでこのような構成を取る必要があったのでしょうか。このような、DBを引かずに対応するビューだけ表示する、というような挙動であれば、Sinatraを使ったほうがすっきり書けると思います。

viewのみを表示することに関してのリファレンスが相当に落ちてないことにビックリしておりました。

Railsには、コントローラーやルートの作り方に対しても、「Rails way」と呼ばれるような、標準的なやり方が確立されています。「複数のディレクトリを1つのコントローラーに流す」というのはそこから外れすぎて、逆に面倒となります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/11 11:52

    ご回答ありがとうございます。
    Sinatraに関して全く知っていなかったので見たのですがこのようなシングルページの集合体みたいなサービス作る際はこっちの方が圧倒的に良さそうですね。
    僕はrailsというフレームワークに関して色々勘違いしてみたいで、何故ネットで調べても自分の欲しい情報が集まらないか疑問でした。ありがとうございます。Sinatraの採用を検討してみます。

    キャンセル

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

  • ただいまの回答率 90.76%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Ruby

    7033questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • Ruby on Rails

    6747questions

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

  • Ruby on Rails 4

    2381questions

    Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

  • Ruby on Rails 5

    1297questions

  • トップ
  • Rubyに関する質問
  • Ruby On Railsでviews以下のファイルの全てを表示させたいがrenderするとTemplate is missingが起こる