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

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

ただいまの
回答率

89.99%

ruby on rails でブログサイトを製作しています。投稿を表示する際に template is missing エラーがずっと出ます

受付中

回答 0

投稿

  • 評価
  • クリップ 1
  • VIEW 735

shocyu

score 14

ruby on rails にてブログサイトを製作していますが、投稿を表示する(showアクション)においてエラーが出ます。

投稿は micropost モデル、投稿者(ユーザ)は user モデルを作成してあります。当然ながら、micropost は belong to user の関係にあります。

エラーの内容は
Missing template microposts/show, application/show with {:locale=>[:ja], :formats=>[:html], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}. Searched in: * "/home/ubuntu/workspace/my_blog/app/views" * "/usr/local/rvm/rubies/ruby-2.0.0-p598/lib/ruby/gems/2.0.0/gems/devise-3.4.1/app/views"
というものです。

あともう少しで完成、というところで困っています。よろしくお願いします。microposts/show に関連するモデル、コントローラー、ビュー、そして route.rb のソースを以下に貼り付けておきます。

app/models/micropost.rb
class Micropost < ActiveRecord::Base
    belongs_to :user, class_name: "User", foreign_key: "user_id"
    
    STATUS_VALUES = %w(draft user_only public)
    
    validates :title, presence: true, length: { maximum: 200 }
    validates :content, presence: true, length: { maximum: 4000 }
    default_scope -> { order('created_at DESC') }
    validates :user_id, presence: true
    validates :status, inclusion: { in: STATUS_VALUES }
    
    scope :common, -> { where(status: "public") }
    scope :published, -> { where("status <> ?", "draft") }
    scope :full, ->(user) {
        where("status <> ? OR user_id = ?", "draft", user.id) }
    scope :readable_for, ->(user) { user ? full(user) : common }
    
    scope :open, -> {
        now = Time.current
        where("posted_at <= ?", now) }
    
    class << self
        def status_text(status)
            I18n.t("activerecord.attributes.micropost.status_#{status}")
        end

        def status_options
            STATUS_VALUES.map { |status| [status_text(status), status] }
        end

        def sidebar_entries(user, num)
            readable_for(user).order(posted_at: :desc).limit(num)
        end
    end
  
end

app/controllers/microposts_controller.rb
class MicropostsController < ApplicationController
  before_action :authenticate_user!

  # (中略)
  
  # 記事詳細
  def show
    @micropost = Micropost.readable_for(current_user).find(params[:id])
  end
  
  # (中略)
  
   private

    def micropost_params
      params.require(:micropost).permit(:title, :content, :posted_at, :status)
    end
    
    def correct_user
      @micropost = current_user.microposts.find_by(id: params[:id])
      redirect_to root_url if @micropost.nil?
    end
end
app/views/microposts/show.html.erb
<% @page_title = @micropost.title + " - " + @micropost.user.name + "さんのブログ" %>
<h1><%= @micropost.user.name %>さんのブログ</h1>
<h2><%= @micropost.title %></h2>

<% if current_member == @micropost.user %>
  <p><%= link_to "編集", [:edit, @micropost] %></p>
<% end %>

<%= simple_format(@micropost.content) %>

<%= render "footer", micropost: @micropost %>
app/config/routes.rb
Rails.application.routes.draw do
  devise_for :users, :controllers => {
    :registrations => "registrations"
  }
  get "users/show"
  
  resources :users do
    collection { get "search" }
    resources :microposts, only: [:index]
  end
  
  resources :users, only: [:show, :index, :destroy]
  resources :microposts
  resources :contacts, only: [:new, :create]
  
  root  'top#index'
  
  match '/help',    to: 'static_pages#help',    via: 'get'
  match '/about',   to: 'static_pages#about',   via: 'get'
  match '/contact', to: 'static_pages#contact', via: 'get'
  match '/blog',    to: 'microposts#index',     via: 'get'
end


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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

まだ回答がついていません

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

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