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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

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

Q&A

解決済

2回答

987閲覧

railsでいいね機能を作成しようとしたら,No route matches [POST]が起こってしまう

rikuou

総合スコア25

Ruby on Rails

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

0グッド

0クリップ

投稿2020/06/19 14:25

ruby on railsでいいね機能を作成しようと思っているのですが,show.html.erbのいいねされていませんのリンクを押すと
下記のrootのエラーが起きてしまいます

No route matches [POST] "/posts/likes/6/create"

なぜ"/posts/likes/6/create"になってしまうのかわかりません.本来は"likes/:post_id/create"のような表示になるはずなのですが...
いろいろ試してみましたが,うまくいきません

どなたかご享受お願いいたします

#show.html.erb <div class="main posts-show"> <div class="container"> <p> <%= @post.content %> </p> <div class="post-time"> <%= @post.created_at %> </div> <% if Like.find_by(user_id: current_user.id, post_id: @post.id) %>  <%= link_to("likes/#{@post.id}/destroy", {method: "post"}) do %> <span class="fa fa-heart like-btn-unlike">いいね</span> <% end %> <% else %> <%= link_to("likes/#{@post.id}/create", {method: "post"}) do %> <span class="fa fa-heart like-btn">いいねされてません</span> <% end %> <% end %> <% if @post.user_id == current_user.id %> <div class="post-menus"> <%= link_to("投稿を編集","/posts/#{@post.id}/edit") %> <%= link_to("削除", "/posts/#{@post.id}/destroy", {method: "post"}) %> </div> <% end %> </div> </div>
#routes.rb Rails.application.routes.draw do devise_for :users, controllers: { omniauth_callbacks: 'users/omniauth_callbacks'} post "likes/:post_id/create" => "likes#create" post "likes/:post_id/destroy" => "likes#destroy" get 'posts/index' => "posts#index" get 'posts/new' => "posts#new" get "posts/:id" => "posts#show" post 'posts/create' => "posts#create" get "posts/:id/edit" => "posts#edit" post "posts/:id/update" => "posts#update" post "posts/:id/destroy" => "posts#destroy" get "/" => "home#top" # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html end
#likes_controller.rb class LikesController < ApplicationController before_action :authenticate_user! def create @like = Like.new(user_id: current_user.id, post_id: params[:post_id]) @like.save redirect_to("/posts/#{params[:post_id]}") end def destroy @like = Like.find_by(post_id: params[:post_id],user_id: current_user.id) @like.destroy redirect_to("/posts/#{params[:post_id]}") end end

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

この部分のことでしょうか。

Ruby

1<% else %> 2 <%= link_to("likes/#{@post.id}/create", {method: "post"}) do %> 3 <span class="fa fa-heart like-btn">いいねされてません</span> 4<% end %>

/posts/likes/6/create となってしまうのは、最初に/が入ってないためかと思います。

修正案

Ruby

1<% else %> 2 <%= link_to("/likes/#{@post.id}/create", {method: "post"}) do %> 3 <span class="fa fa-heart like-btn">いいねされてません</span> 4<% end %>

検証はしていませんが、他のソースが正しく動作しているのであれば、これでできるのではないかと思います。下記の通り、このような書き方はあまりしないため、確定的な回答でなく恐縮です。

補足ですが、
Railsらしいroutes.rbやURLの書き方が下記に記載されていますので、
もしご存じなければ、参考にしてみてください。
URLを生成するヘルパーを使えば今回のようなミスが減りますし、routesの可読性が上がるため問題が発生したときの調査等が早くなると思います。また、他人からのアドバイスも受けやすくなります。
もちろん慣れが必要なので最初は大変です。

https://railsguides.jp/routing.html

投稿2020/06/22 01:02

Cojiro

総合スコア539

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

回答ありがとうございます!
とても分かり易い説明で無事解決できました!自分もこれからpathヘルパー使って可読性高めます

投稿2020/06/25 02:59

rikuou19

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問