Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

No route matches [POST] "/prototypes/8" エラー文の解決

解決したいこと

No route matches [POST] "/prototypes/8"
エラー文が出てしまいます。解決方法を教えてください。

発生している問題・エラー

No route matches [POST] "/prototypes/8"

https://gyazo.com/a371e58ee1ce6783e672e8571cba1437

該当するソースコード

<%if user_signed_in? %>
          <%= form_with(model:@comment, local: true) do |f|%>
            <div class="field">
              <%= f.label :text, "コメント" %><br />
              <%= f.text_field :text %>
            </div>
            <div class="actions">
              <%= f.submit "送信する", class: :form__btn  %>
            </div>
          <% end %> 
        <% else %>
        <ul class="comments_lists">
          <%# 投稿に紐づくコメントを一覧する処理を記述する %>
            <li class="comments_list">
              <%# <%= " コメントのテキスト "%>
              <%# <%= link_to "( ユーザー名 )", root_path, class: :comment_user %>
            </li>
          <%# // 投稿に紐づくコメントを一覧する処理を記述する %>
        </ul>
        <% end %>
class CommentsController < ApplicationController
  def create
    @comment = Comment.new(comment_params)
    if @comment.save
      redirect_to prototype_path(@comment.prototype)
    else
      @prototype = @comment.prototype
      @comments = @prototypes.comments
      render "prototypes/show" 
    end
  end



  private
  def comment_params
    params.require(:comment).permit(:text).merge(user_id: current_user.id, prototype_id: params[:prototype_id])
  end
end
Rails.application.routes.draw do
  devise_for :users
  root to: "prototypes#index"
  resources :prototypes do
     resources :comments, only: :create
  end
end
class PrototypesController < ApplicationController
  def index
    @prototypes=Prototype.all.includes(:user)
  end

  def new
    @prototype=Prototype.new
  end

  def create
    @prototype=Prototype.new(prototype_params)
    if @prototype.save
       redirect_to root_path
    else
       render :new
    end
  end

  def show
    @prototype = Prototype.find(params[:id])
    @comment=Comment.new
  end

  def edit
    @prototype = Prototype.find(params[:id])
  end

  def update
    @prototype = Prototype.find(params[:id])
    if @prototype.update(prototype_params)
       redirect_to prototype_path
    else
       render :edit
    end
  end

  def destroy
    prototype = Prototype.find(params[:id])
    prototype.destroy
    redirect_to root_path
  end


  private

  def prototype_params
    params.require(:prototype).permit(:title,:catch_copy,:concept,:image).merge(user_id: current_user.id)
  end
end

自分で試したこと

エラーが起きた箇所とpostで指定されているURIパターンに不一致が見られたので直そうと思ったが上手く治せなかった。

0

1Answer

エラー内容は,

No route matches [POST] "/prototypes/8"

で,POST メソッドで,URL /prototypes/8 にアクセスしてroute がマッチしていないようです.

添付された画像では,POST/prototypes/:id なものは乗ってないようです.

これはどういう状況にしたいのでしょうか?

1つの案として,POST + /prototypes/:id にアクセスできるようにするならば,
routes に追加すれば良さそうです.

こちら添付されたソースからは POST + /prototypes/:id にアクセスする経路は無さそうなので,
どこからリンクしてそこに行こうとしてるのかも推測できませんでした.

参考

0Like

Your answer might help someone💌