現在、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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/03/06 10:47