ユーザーが承認または拒否できるチャレンジのテーブルがあり、適切に機能させることができません。ユーザーが承認ボタンをクリックすると、チャレンジが承認されたという通知が表示され(機能しない - 常に承認されない)、サイトを更新する必要があります -これは機能します
クラスとリモートの true 属性が必要なため、button_to に「醜い」方法を使用しました。そして、私は知っています - 私は今のところ同意ボタンを使っていたので、「辞退」ボタンは最新ではありません。
<tbody>
<% @challenges.each do |ch| %>
<tr>
<td><%= Game.find_by_id(Duel.find_by_id(ch.duel_id).game_id).name %></td>
<td><%= Duel.find_by_id(ch.duel_id).euro %></td>
<td><%= link_to "#{User.find_by_id(ch.challengedplayer).name}", user_path(User.find_by_id(ch.challengedplayer)) %></td>
<td><%= button_to 'Accept', { controller: :challenges, action: "reaction", ch_accepted: true, challenge: ch, challenge_id: ch.id }, method: :patch, data: { confirm: 'Do you really want to challenge this player?' }, class: 'button challenge', remote: true %></td>
<td><%= button_to 'Decline', { controller: :challenges, action: "reaction", accepted: false}, method: :patch, data: { confirm: 'Are you sure?' }, class: 'button challenge', remote: true%></td>
</tr>
<% end %>
</tbody>
これがコントローラーです - challenge_paramsを使用できないように見えるという大きな問題があります。
def reaction
if :accepted == "true"
@challenge = Challenge.find(params[:challenge_id])
@challenge.open = false
@challenge.accepted = true
@challenge.save
flash[:notice] = "You successfully challenged #{User.find_by_id(@challenge.challengedplayer).name} for #{Duel.find_by_id(@challenge.duel_id).euro }€"
render :js => "window.location = 'challenges'"
else
flash[:notice] = "Error"
render :js => "window.location = 'challenges'"
end
end
private
def challenge_params
params.require(:challenge).permit(:accepted, :open, :duel_id, :challenge_id)
end
end
:accepted が true であっても、常にエラー ループに陥ります。
Started PATCH "/reaction?ch_accepted=true&challenge=1&challenge_id=1" for ::1 at 2015-09-03 20:25:33 +0200
Processing by ChallengesController#reaction as JS
Parameters: {"authenticity_token"=>"rDT/OucYRavkRBXUGVpgtZsFG9eKAwRKNo+hSsc+VIJW1CfPBBqwlt7baRHrjz/g8n2dJX1ypjWVrk1Vs/Mgeg==", "ch_accepted"=>"true", "challenge"=>"1", "challenge_id"=>"1"}
そして、これがルートファイルです
Rails.application.routes.draw do
resources :duels
patch 'reaction' => 'challenges#reaction'
resources :challenges
root to: 'duels#index'
devise_for :users
#, controllers: {registrations: "users/registrations"}
resources :users
end