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

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

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

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

1回答

3484閲覧

indexページでいいねしたproductをマイページで一覧で出したい

tomoharu

総合スコア107

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2017/03/05 11:45

現在、ruby on rails でwebアプリを作成中です。
#やりたいこと:indexページでいいねしたproductをマイページで一覧で出したい
#現状:いいねはできるが、マイページにいいねしたproductが出てこない
productはここではcomicという変数です。
以下、コードです。route,三種類のmodel, comics_controller,indexのview,user_controler,showのview,likes_controlerの順です。
長いので、お時間がある時で結構です。何卒よろしくお願いいたします。

route.rb

ruby

1 2Rails.application.routes.draw do 3 root :to => 'comics#index' 4 post "/" => "comics#create" 5 resources :user do 6 resources :comics do 7 member do 8 post 'like', to: "likes#create" 9 end 10 collection do 11 get 'search' 12 end 13 end 14 end 15end

likes.rb(likes.rbの中のカラムは全てt.referencesで外部キーです。)

ruby

1 2class Like < ActiveRecord::Base 3 belongs_to :comic, counter_cache: :like 4 belongs_to :user 5 6end

comic.rb

ruby

1class Comic < ActiveRecord::Base 2 has_many :users, through: :likes 3 has_many :likes, dependent: :destroy 4 mount_uploader :front_cover, FrontCoverUploader 5 6end

user.rb

ruby

1class User < ActiveRecord::Base 2 has_many :likes 3 has_many :comics, through: :likes 4end 5

comics_controller

ruby

1class ComicsController < ApplicationController 2 before_action :authenticate_user! ,only: [:show, :search] 3 def index 4 @comic = Comic.order('id DESC') 5 @comic_ranking = Comic.order("like DESC").limit(5) 6 end 7 8 def create 9 @comic = Comic.new(comic_params) 10 @comic.save 11 redirect_to :action =>'index' 12 end 13 14 def search 15 @q = Comic.ransack(params[:q]) 16 @comics = @q.result 17 end 18 19 def comic_params 20 params.require(:comic).permit(:title,:author,:like,:front_cover) 21 end 22end

index.html(comics_controller配下)

ruby

1<table> 2 <thead> 3 <tr> 4 <th>作品表紙</th> 5 <th>作品タイトル</th> 6 <th>作者</th> 7 <th>いいねの数</th> 8 </tr> 9 </thead> 10 11 <tbody> 12 13 <% @comic.each do |comic| %> 14 <tr> 15 <td><%= image_tag comic.front_cover.to_s %></td> 16 <td><%= comic.title %></td> 17 <td><%= comic.author %></td> 18 19 <td><%= button_to 'いいね',like_user_comic_path(id: comic.id, user_id: current_user.id) %></td> 20 21 <td><%= comic.like %></td> 22 23 </tr> 24 <%end%> 25 <div 26 class="fb-like" 27 data-share="true" 28 data-width="450" 29 data-show-faces="true"> 30</div> 31 </tbody> 32</table> 33 34```user_controller 35```ruby 36class UserController < ApplicationController 37 38 def create 39 @user = User.new 40 @user.save 41 end 42 def show 43 @user = current_user 44 @likes = Like.where("user_id = ?", @user) 45 end 46end 47

show.html (user_controller配下)

ruby

1 2 3<h2>マイページ</h2> 4 5<%= @user.comics.each do |comic| %> 6 <tr> 7 <td><%= image_tag comic.front_cover.to_s %></td> 8 <td><%= comic.title %></td> 9 <td><%= comic.author %></td> 10 </tr> 11<% end %>

likes.controler

ruby

1def create 2 @comic_liked = Comic.find(params[:id]) 3 @comic_liked.update(like: @comic_liked.like+1) 4 5 redirect_to :controller => 'comics', :action => 'index' 6 end

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

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

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

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

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

guest

回答1

0

ベストアンサー

現状の分析が間違っています。
X現状:いいねはできるが、マイページにいいねしたproductが出てこない
O現状:いいねでカウンターは増えるが、userとcomicがひもづけられない。
下記のコードを試してください
likes.controler

ruby

1def create 2 @comic_liked = Comic.find(params[:id]) 3 @comic_liked.likes.find_or_create_by(user_id: params[:user_id]) 4 @comic_liked.update(like: @comic_liked.like+1) 5 6 redirect_to :controller => 'comics', :action => 'index' 7 end

仕様はわかりませんが、いいねがすでについている
comicにも再度いいねをしてカウンターをあげられるようになっています。

投稿2017/03/06 03:26

編集2017/03/06 03:27
moke

総合スコア2241

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

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

tomoharu

2017/03/06 10:47

まさにやりたかったことが実現されました。ありがとうございました。 今後の参考にさせていただきたいので、もしよろしければ、何がいけなかったのか教えていただけないでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問