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

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

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

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

Q&A

解決済

2回答

2909閲覧

Railsでお気に入りボタン登録・削除のボタン作成

shimony2k

総合スコア22

Ruby on Rails

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

0グッド

0クリップ

投稿2019/10/13 01:56

現在、Ruby on Railsを使用して服のお気に入り登録・削除ボタンを作成中です。
model,controller,viewの実装を済ませて実際動かしてみるとお気に入り登録はできるが、削除ができない状況です。
削除ボタンを押すとcontrollerのアクションが実行されず直接viewに飛んでいる感じです。
どこが間違っているんでしょうか。ご回答よろしくお願いします。

↓owners_controller

class OwnersController < ApplicationController protect_from_forgery def create @huku=Huku.find(params[:huku_id]) if params[:type] == "Like" now_user.like(@huku) flash[:success]="商品をLikeしました" end redirect_back(fallback_location: root_path) def destroy @huku = Huku.find(params[:huku_id]) if params[:type] == 'Like' now_user.unlike(@huku) flash[:success] = '商品の Like を解除しました。' end redirect_back(fallback_location: root_path) end end # 現在のユーザー def now_user @now_user=User.find_by(id: session[:user_id]) end end

↓_like_button.html.erb(このページから登録・削除を行います)

<% if current_user.like?(huku) %> <%= form_tag("owners/#{huku.id}", method: :delete) do %> <%= hidden_field_tag :huku_id, huku.id %> <%= hidden_field_tag :type, 'Like' %> <%= submit_tag 'UNLIKE', style:"background-color:#444444;color:white;padding:2% 5% 3% 5%;border-style:none;font-weight:600;"%> <% end %> <% else %> <%= form_tag(owners_path) do %> <%= hidden_field_tag :huku_id, huku.id %> <%= hidden_field_tag :type, 'Like' %> <%= submit_tag 'LIKE ',style:"padding:2% 5% 2% 5%;border-style:none;font-weight:600;" %> <% end %> <% end %>

↓user.rb(登録・削除のメソッドを定義しています)

class User < ApplicationRecord before_save { self.email.downcase! } validates :name, presence: true, length: { maximum: 50 } validates :email, presence: true, length: { maximum: 255 }, format: { with: /\A[\w+\-.]+@[a-z\d\-.]+.[a-z]+\z/i }, uniqueness: { case_sensitive: false } has_secure_password mount_uploader :picture,PictureUploader has_many :owners has_many :hukus, through: :owners has_many :likes has_many :like_hukus, through: :likes, source: :huku def like(huku) self.likes.find_or_create_by(huku_id: huku.id) end def unlike(huku) like = self.likes.find_by(huku_id: huku.id) like.destroy if like end def like?(huku) self.like_hukus.include?(huku) end end

↓routes.rb

Rails.application.routes.draw do get 'owners/create' get 'owners/destroy' get 'hukus/index' get 'hukus/show' get 'hukus/new' get 'hukus/create' get 'sessions/new' get 'sessions/create' get 'sessions/destroy' get 'users/show' get 'users/new' get 'users/create' root to:"toppages#index" get "/", to: "toppages#index" get "login",to:"sessions#new" post "login",to:"sessions#create" get 'out', to: 'sessions#destroy' get 'top', to:"toppages#index" get "signup", to:"users#new" resources :users, only: [:show, :new, :create] get "manage", to: "hukus#index" get "newitem", to: "hukus#new" resources :hukus, only: [:index, :show, :new, :create, :edit, :update] get "internal", to: "hukus#login" post "match", to:"hukus#match" resources :owners, only: [:create, :destroy] end

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

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

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

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

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

guest

回答2

0

ベストアンサー

has_many :likes
has_many :like_hukus, through: :likes, source: :huku
ここがおかしいです
has_many :like_hukus
has_many :likes, through: :like_hukus, source: :huku
でないかな。

なお
now_userですが current_user というのが標準的な命名なので、それですと回答者の混乱がへります。

投稿2019/10/13 03:29

winterboum

総合スコア23329

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

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

shimony2k

2019/10/14 06:04

ご回答いただいた方法で修正してみましたが、エラーが出てしまったりして解決できませんでした。お気に入り削除ボタンを押すとどうしてもdestroyのviewに飛んでしまうのですが、どうすればdestroyのアクションは実行させますでしょうか。 よろしくお願いします。
shimony2k

2019/10/14 06:10

すいません、createメソッドのendが抜けていました。 初歩的なミスでした。ご回答していただいたのに申し訳ありません。
guest

0

ちょっと全てを見ていないのでわかりませんが、おそらく..

def destroy
@huku = Huku.find(params[:huku_id])
if @huku.destroy
flash[:success] = '商品の Like を解除しました。'
end
redirect_back(fallback_location: root_path)
end

createと書き方が違いますが、お試しください。ご参考までに。

投稿2019/10/13 02:04

tomtom1

総合スコア168

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

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

winterboum

2019/10/13 03:25

それですと、LikeでなくHukuが削除されちゃいません?
tomtom1

2019/10/13 03:34

あっそうですね!なぜかHuku消す考えで書いてました。失礼しました!
shimony2k

2019/10/14 06:11

初歩的なケアレスミスでした。申し訳ありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問