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

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

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

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

Ruby

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

Ruby on Rails

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

Q&A

解決済

1回答

686閲覧

【Ruby on Rails】いいねボタンを押すと投稿詳細ページに飛んでしまう

is02

総合スコア17

Ruby on Rails 5

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

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/01/06 14:44

編集2020/01/07 16:03

前提・実現したいこと

前提:いいねボタンは投稿一覧ページ、投稿詳細ページに実装済み
実現したいこと:いいねボタンを押しても投稿一覧ページに留まりたいが、カウントはしたい。
投稿詳細ページは変わらずいいね機能を実装したい

投稿一覧ページ:post_images/index.html.erb

発生している問題・エラーメッセージ

現状:いいねボタンを押すと投稿詳細ページに飛んでしまう、カウントはする。

該当のソースコード

post_images/index.html.erb

<section class="sct-color-1 slice"> <div class="container-fluid masonry-container"> <div class="row"> <div class="col-md-8 col-sm-offset-2"> <div class="masonry-wrapper-cols"> <div class="masonry-gutter"></div> <% @post_images.each do |post_image| %> <div class="masonry-block"> <div class="block block-image v1"> <div class="block-image"> <div class="view view-first"> <%= link_to post_image_path(post_image.id) do %> <%= attachment_image_tag post_image, :image %> <% end %> </div> </div> <div class="block-content"> <%= attachment_image_tag post_image.user, :profile_image, size: "100x100", fallback: "no_image.jpg", class:"img-circle pull-left profile-thumb" %> <h3 class="block-title"> <%= post_image.image_name %> </h3> <ul class="inline-meta"> <li>By <%= post_image.user.name %> </li> <li> <%= link_to "#{post_image.post_comments.count} コメント", post_image_path(post_image.id) %> </li> <% if post_image.favorited_by?(current_user) %> <li> <%= link_to post_image_favorites_path(post_image), method: :delete do %> <i class="fa fa-star" aria-hidden="true" style="color: orange; font-size: 15px;"></i> <%= post_image.favorites.count %> ファイト <% end %> </li> <% else %> <li> <%= link_to post_image_favorites_path(post_image), method: :post do %> <i class="fa fa-star" aria-hidden="true" style="font-size: 15px;"></i> <%= post_image.favorites.count %> ファイト <% end %> </li> <% end %> </ul> </div> </div> </div> <% end %> <%= paginate @post_images, class: "paginate" %> </div> </div> </div> </div> </section>

favorites_controller.rb

class FavoritesController < ApplicationController def create post_image = PostImage.find(params[:post_image_id]) favorite = current_user.favorites.new(post_image_id: post_image.id) favorite.save redirect_to post_image_path(post_image) end def destroy post_image = PostImage.find(params[:post_image_id]) favorite = current_user.favorites.find_by(post_image_id: post_image.id) favorite.destroy redirect_to post_image_path(post_image) end end

post_image.rb

class PostImage < ApplicationRecord belongs_to :user attachment :image has_many :post_comments, dependent: :destroy has_many :favorites, dependent: :destroy validates :image_name, presence: true validates :image, presence: true def favorited_by?(user) favorites.where(user_id: user.id).exists? end end

routes.rb

Rails.application.routes.draw do devise_for :users root 'post_images#index' resources :post_images, only: [:new, :create, :index, :show, :destroy] do resource :favorites, only: [:create, :destroy] resource :post_comments, only: [:create, :destroy] end resources :users, only: [:show, :edit, :update] # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html end

試したこと

link_toのパスをpost_images_path(投稿一覧ページ)に変えたところrouting_errorになった

補足情報(FW/ツールのバージョンなど)

Rails 5.2.4.1
ruby 2.5.7p206 (2019-10-01 revision 67816) [x86_64-linux-gnu]

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

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

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

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

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

winterboum

2020/01/07 09:25

いいねボタンてどれですか?
is02

2020/01/07 12:19

<% if post_image.favorited_by?(current_user) %> <li> <%= link_to post_image_favorites_path(post_image), method: :delete do %> <i class="fa fa-star" aria-hidden="true" style="color: orange; font-size: 15px;"></i> <%= post_image.favorites.count %> ファイト <% end %> </li> <% else %> <li> <%= link_to post_image_favorites_path(post_image), method: :post do %> <i class="fa fa-star" aria-hidden="true" style="font-size: 15px;"></i> <%= post_image.favorites.count %> ファイト <% end %> </li> <% end %> この文のことです。分かりづらくてすみません
winterboum

2020/01/07 12:47

routes.rb を追加してください
is02

2020/01/07 15:09

申し訳ありません。追加いたしました。
guest

回答1

0

ベストアンサー

class FavoritesController の def create が
redirect_to post_image_path(post_image) で終わっているので、post_imageの詳細に行ってます。
ここを post_images_path 複数形 のに変えてみてください

追加情報
3つ方法があります。

  1. ブラウザーからのリクエストヘッダーにどのURLからきたか、という情報があります。それを読んで変える
  2. link_to post_image_favorites_path(post_image) にさらに

link_to post_image_favorites_path(post_image,from: :index), とか from: :new とかをつけて parms[:from] で分ける
3) indexから呼ぶときは別のactionで作る。

投稿2020/01/08 00:05

編集2020/01/08 02:21
winterboum

総合スコア23329

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

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

is02

2020/01/08 01:27

投稿詳細ページにもいいね機能を実装しており、redirect_to post_image_path(post_image)は投稿詳細ページでいいねを押した時にリダイレクトするものとして作りました。 投稿詳細ページのいいね機能はそのままで、投稿一覧ページのいいね機能を実装したいです。 ・投稿詳細ページのいいね→押すと投稿詳細ページにリダイレクト ・投稿一覧ページのいいね→押すと投稿一覧ページにリダイレクト という2つを実装したいのですが、そのような方法はあるんでしょうか? また、どちらかのいいねを押した時に投稿詳細ページ、投稿一覧ページのいいねカウントが連動するようにもしたいと考えております。 複雑で申し訳ございません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問