

### 前提・実現したいこと

前提：いいねボタンは投稿一覧ページに実装済み、投稿詳細ページにもいいね機能を実装しております。  
実現したいこと：投稿一覧ページのいいねボタンを押すと、投稿一覧ページにリダイレクトしてカウントをさせたい。＋投稿詳細ページのいいね機能は変わらず実装したい。

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

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

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

### 該当のソースコード

post_images/index.html.erb

[code]

    <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>
    
[/code]

favorites_controller.rb

[code]

    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
    
[/code]

post_image.rb

[code]

    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
    
[/code]

post_images/show.html.erb

[code]

    <section class="sct-color-1 slice">
      <div class="container">
        <div class="row">
          <div class="col-md-12 post_images_container">
            <div class="post-item">
    
            <div class="post-meta-top">
              <div class="post-image">
                <%= attachment_image_tag @post_image, :image %>
              </div>
            </div>
              <div class="post-content">
                  <h2 class="post-title"><%= @post_image.image_name %></h2>
                  <ul class="meta-info-cells v4 float-wrapper">
                    <li>
                       <i class="fa fa-user" style="font-size: 15px;"></i>
                       <%= link_to @post_image.user.name, user_path(@post_image.user.id) %>
                    </li>
                    <li>
                      <i class="fa fa-calendar" style="font-size: 15px;"></i><%= @post_image.created_at.strftime('%Y/%m/%d') %>
                    </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 %>
                    <li>
                      <i class="fa fa-comment" style="font-size: 15px;"></i>
                      <a href="#comments"><%= @post_image.post_comments.count %></a>
                    </li>
                    <li>
                     <% if @post_image.user == current_user %>
                      <%= link_to "削除", post_image_path(@post_image), method: :delete %>
                     <% end %>
                    </li>
                  </ul>
                  <div class="post-content-inner mt-20">
                      <p><%= @post_image.caption %></p>
                  </div>
              </div>
    
              <div class="comment-list bt style-2" id="comments">
                <div class="float-wrapper">
                  <h2 class="comment-count"><%= @post_image.post_comments.count %>件のコメント</h2>
                </div>
                <ol>
                  <% @post_image.post_comments.each do |post_comment| %>
                    <li class="comment">
                        <div class="comment-body bb">
                            <div class="comment-avatar">
                                <div class="avatar">
                                    <%= attachment_image_tag psot_comment.user, :profile_image, 60, 60, fallback: "no_image.jpg" %>
                                </div>
                            </div>
                            <div class="comment-text">
                                <div class="comment-author clearfix">
                                    <a href="#" class="link-author"><%= post_comment.user.name %></a>
                                    <span class="comment-meta">
                                      <span class="comment-date"><%= post_comment.created_at.strftime('%Y/%m/%d') %></span>
                                    </span>
                                </div>
                                <div class="comment-entry"><%= post_comment.comment %></div>
                            </div>
                        </div>
                    </li>
                  <% end %>
                </ol>
              </div>
              <hr>
    
              <!-- Add comment section -->
              <div class="section-title-wrapper style-1 v1 mt-30" id="divAddComment">
                <h3 class="section-title left">
                  <span>コメント</span>
                </h3>
              </div>
              <%= form_for [@post_image, @post_comment] do |f| %>
                <div class="row">
                    <div class="col-sm-12">
                        <%= f.text_area :comment, rows:'5', class: "form-control",placeholder: "コメントをここに" %>
                    </div>
                </div>
                <%= f.submit "送信する", class: "btn btn-lg btn-base-1 mt-20 pull-right" %>
              <% end %>
    
            </div>
          </div>
        </div>
      </div>
    </section>
    
[/code]

### 試したこと

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]


CC BY-SA 4.0
2020-01-06T14:44:56.650
62008
2023-07-01T08:07:40.940
2020-01-07T07:50:09.243
question
ruby-on-rails ruby
いいねボタンを押すと投稿詳細ページに飛んでしまう


Railsガイド見てみました。  
<https://railsguides.jp/routing.html>

![](https://i.stack.imgur.com/ULABa.png)

* * *

`post_image_path(post_image.id)` って書き方だと、  
「articles#show」のアクションが呼ばれる気がします。  
「articles#create」を呼ぶためには、`post_images_path` って書き方にする必要があるかもしれません。

ただ、`link_to` だとGETでrequestされる可能性があるので、  
「articles#create」を呼ぶためにはPOSTでrequestする必要があるかと思われます。  
なので、

[code]

    <%= link_to post_images_path, method: :post do %>
        <%= attachment_image_tag post_image, :image %>
    <% end %>
    
[/code]

とかって書いたりすれば出来たりしませんか？

* * *

あと、controllerの`#create` の最後の部分、  
`redirect_to post_images_path` にしないと一覧ページに戻らないかと思います。


CC BY-SA 4.0
2020-01-07T02:24:15.443
62015
2020-01-07T02:27:45.893
2020-01-07T02:27:45.893
37351
37351
62008
answer