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

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

ただいまの
回答率

89.65%

herokuにデプロイした後にThe page you were looking for doesn't exist.

受付中

回答 0

投稿

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

tackii

score 10

Cloud9で作成したRailsのブログアプリをherokuにデプロイした後に、
投稿(Contact)をお気に入りしようとしたらエラーになってしまいました・・・
Cloud9上では正常に動作します。

The page you were looking for doesn't exist.
ActiveRecord::RecordNotFound (Couldn't find Contact with 'id'=):

 該当のソースコード

<div class="container">
  <div class="row">
   <div class="col-lg-12">

   <h1>問い合わせ詳細</h1>
   <div class="col-md-6">
     <p>件名:<%= @contact.title %></p>
     <p>内容:<%= @contact.content %></p>
     <p><%= image_tag @contact.image %></p>

         <% unless @contact.user_id == current_user.id %>
             <% if @favorite.present? %>
                 <% if @favorites.user_id == current_user.id %>
                       <%= link_to 'お気に入り解除する', favorite_path(id: @favorite.id),
                       method: :delete, class: 'btn btn-default btn-sm btn btn-danger' %>
                  <% else %>
                       <%= link_to 'お気に入りにする', favorites_path(contact_id: @contact.id),
                       method: :post, class: 'btn btn-default btn-sm btn btn-primary' %>
                  <% end %>
             <% else %>
                <% if @favorites.nil? %>
                    <%= link_to 'お気に入りにする', favorites_path(contact_id: @contact.id),
                    method: :post, class: 'btn btn-default btn-sm btn btn-primary' %>
                <% end %>
             <% end %>
        <% end %>


    
   </div>
   <div class="col-md-6">
     <h3>コメント一覧</h3>
     <div id="responses_area">
       <%= render partial: 'responses/index', locals: { responses: @responses, contact: @contact } %>
     </div>
       <%= render partial: 'responses/form', locals: { response: @response, contact: @contact } %>
   </div>

   <div class="col-md-6">
    <%= link_to "一覧画面にもどる", contacts_path, class: 'btn btn-default btn-sm btn btn-default' %>
   </div>
   </div>
  </div>
</div>
class FavoritesController < ApplicationController
  def create
    favorite = current_user.favorites.create(contact_id: params[:contact_id])
    redirect_to contacts_url, notice: "#{favorite.contact.user.name}さんの投稿をお気に入りしました"
  end

  def destroy
    favorite = current_user.favorites.find_by(id: params[:id]).destroy
    redirect_to contacts_url, notice: "#{favorite.contact.user.name}さんの投稿をお気に入り解除しました"
  end

  def show
    @user = User.find(session[:user_id])
    @favorite_contacts = @user.favorite_contacts
  end


  #追加
  def index
    @user = current_user
    @favorites = Favorite.where(user_id: @user.id).all
  end

  def show_favorites
    @contacts = Contact.find(params[:id])
    @favorites = Favorite.where(contact_id: @contact.id).all
  end
  private

  def contact_params
    params.require(:contact).permit(:title,:content, :image, :image_cache)
  end
end
class ContactsController < ApplicationController
  before_action :set_contact, only:[:show, :edit, :update, :destroy]
  before_action :login_check, only: [:index, :new, :edit, :show, :destroy]

  def index
    @contacts = Contact.all
  end

  def new
    if params[:back]
      @contact = Contact.new(contact_params)
    else
      @contact = Contact.new
    end
  end

  def create
    @contact = Contact.new(contact_params)
    @contact.user_id = current_user.id
    if @contact.save
      #ContactMailer.contact_mail(@contact).deliver
      redirect_to contacts_path, notice: "問い合わせ中・・・"
    else
      render 'new'
    end
  end

  def show
    @contact = Contact.find(params[:id])

    @favorite = current_user.favorites.find_by(contact_id: @contact.id)
    @favorites = Favorite.find_by(contact_id: @contact.id)


    @responses = @contact.responses.includes(:user).all
    @response = @contact.responses.build(user_id: current_user.id) if current_user
  end

   def edit
    @contact = Contact.find(params[:id])
   end

  def update
    @contact = Contact.find(params[:id])
    if @contact.update(contact_params)
      redirect_to contacts_path, notice: "投稿内容を更新しました"
    else
      render 'edit'
    end
  end

  def destroy
    @contact.destroy
    redirect_to contacts_path, notice: "投稿を削除しました"
  end

  def confirm
    @contact = Contact.new(contact_params)
    @contact.user_id = current_user.id
    render :new if @contact.invalid?
  end


  private

  def contact_params
    params.require(:contact).permit(:title,:content, :image, :image_cache)
  end

  def set_contact
    @contact = Contact.find(params[:id])
  end

  def login_check
    unless current_user
      render new_session_path
    end
  end
end
class Contact < ApplicationRecord
  validates :title, presence: true, length: {in: 1..500 }
  validates :content, presence: true, length: {in: 1..500}

  belongs_to :user
  has_one :favorite
  has_many :favorite_users, through: :favorites, source: :user
  has_many :responses, dependent: :destroy

  mount_uploader :image, ImageUploader
end
class User < ApplicationRecord
  validates :name, presence: true, length: { maximum: 30 }
  validates :email, presence: true, length: { maximum: 255 },
            format: { with: /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i }

  before_validation { email.downcase! }

  has_secure_password
  validates :password, presence: true, length: { minimum: 6}

  has_many :contacts
  has_many :favorites, dependent: :destroy
  has_many :favorite_contacts, through: :favorites, source: :contact

  has_many :responses

  mount_uploader :icon, IconUploader
end
Rails.application.routes.draw do

  root to: 'tops#top'
  resources :contacts do
    resources :responses
    collection do
      post :confirm
    end
  end

  resources :contacts do
    member do
      get "show_favorites" => "favorites#show_favorites"    
    end
  end
  resources :sessions, only:[:new, :create, :destroy]
  resources :users
  resources :favorites, only:[:create, :destroy, :show, :index, :show_favorites]

end

### 試したこと

rake assets:precompile

<%= link_to 'お気に入りにする', favorites_path(contact_id: @contact.id),

<%= link_to 'お気に入りにする', contacts_path(contact_id: @contact.id),
に変えるなどしましたが全くダメでした・・・

もしも情報が不足していたらご指摘ください。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正の依頼

  • dice142

    2018/09/28 11:16

    「rails routes」の出力結果はどうなりますか?

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2018/09/28 11:52

    contactsリソースが2つ重複しているように見えるのですが、そのあたりの問題はないんですかね... dice142さんの言うように`rails routes`の出力結果が気になりますね。

    キャンセル

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

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

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