プログラミングを始めてまだ二か月の初心者です。
練習がてら、railsでコミュニティ型のQ&Aサイトを作っています。
そして、Aに対してgoodとbadで評価できる機能を作っています。
発生している問題
Aに対して、goodとbadをつけられるとこまではできたのですが、
すでにbadがついてるときにgoodを押すと、すでについているbadを削除してgoodを追加する。
という処理を実装したいのですが、
どうすれば、この機能が実装できるのかわかりません、、。
link_toの引数を増やせないか、、?など
色々、自分でも調べてみたのですが、
全くわからなくて困っています・・・。
どうすれば、この機能を作れるようになるのか、
皆さんのお力を貸していただけると嬉しいです。
よろしくお願いします。
該当のソースコード
app/views/answers/show.html.erb
<h2><%= @community.name %></h2> <h1><%= @que.title %></h1> <h2><%= @que.content %></h2> <h1><%= @answer.title %></h1> <% if user_signed_in? %> <%#= good %> <% if Good.find_by(user_id: current_user.id, answer_id: @answer.id) %> <%= link_to("/communities/#{@community.id}/ques/#{@que.id}/answers/#{@answer.id}/goods", {method: "delete"}) do %> <p>good解除</p> <% end %> <% else %> <%= link_to("/communities/#{@community.id}/ques/#{@que.id}/answers/#{@answer.id}/goods", {method: "post"}) do %> <p>goodする?</p> <% end %> <% end %> <%#= bad %> <% if Bad.find_by(user_id: current_user.id, answer_id: @answer.id) %> <%= link_to("/communities/#{@community.id}/ques/#{@que.id}/answers/#{@answer.id}/bads", {method: "delete"}) do %> <p>bad解除</p> <% end %> <% else %> <%= link_to("/communities/#{@community.id}/ques/#{@que.id}/answers/#{@answer.id}/bads", {method: "post"}) do %> <p>badする?</p> <% end %> <% end %> <% end %> <h2><%= @answer.content %></h2>
app/controllers/bads_controller.rb
class BadsController < ApplicationController def create @bad= Bad.new( user_id: current_user.id, community_id: params[:community_id], answer_id: params[:answer_id] ) @bad.save redirect_to("/communities/#{params[:community_id]}/ques/#{params[:que_id]}/answers/#{params[:answer_id]}/show") end def destroy @bad= Bad.find_by( user_id: current_user.id, answer_id: params[:answer_id] ) @bad.destroy redirect_to("/communities/#{params[:community_id]}/ques/#{params[:que_id]}/answers/#{params[:answer_id]}/show") end end
app/controllers/goods_controller.rb
class GoodsController < ApplicationController def create @good= Good.new( user_id: current_user.id, community_id: params[:community_id], answer_id: params[:answer_id] ) @good.save redirect_to("/communities/#{params[:community_id]}/ques/#{params[:que_id]}/answers/#{params[:answer_id]}/show") end def destroy @good= Good.find_by( user_id: current_user.id, answer_id: params[:answer_id] ) @good.destroy redirect_to("/communities/#{params[:community_id]}/ques/#{params[:que_id]}/answers/#{params[:answer_id]}/show") end end
config/routes.rb
Rails.application.routes.draw do get 'answers/index' devise_for :users get "/" => 'communities#index' get "communities/:id/show" => "communities#show" get "communities/:id/rule" => "communities#rule" post "communities/create" => "communities#create" post "communities/new" => "communities#new" get "communities/:id/ques/index" => "ques#index" get "communities/:community_id/ques/:que_id/answers/index" => "answers#index" get "communities/:community_id/ques/:que_id/answers/:id/show" => "answers#show" resources :communities, except: [:index, :show] do resources :ques, except: [:index] do resources :answers, except: [:index, :show] do resource :goods, only: [:create, :destroy] resource :bads, only: [:create, :destroy] end post "answers/create" => "answers#create" post "answers/new" => "answers#new" end post "/ques/create" => "ques#create" post "/ques/new" => "ques#new" end end
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。