0

親のコントローラ&ビュー内のネストされたリソースを更新するにはどうすればよいですか? 親コントローラとビューを介してネストされたリソースを更新しますか?

pry(main)> Duel.last #Duel has_many Duelers 
id: 16, 
consequence: "test", 
reward: "test", 
created_at: Wed, 03 Aug 2016 19:01:46 EDT -04:00, 
updated_at: Wed, 03 Aug 2016 19:01:46 EDT -04:00> 
pry(main)> Dueler.last 
id: 26, 
user_id: 78, 
challenge_id: 175, 
created_at: Wed, 03 Aug 2016 19:01:46 EDT -04:00, 
updated_at: Wed, 03 Aug 2016 19:01:46 EDT -04:00, 
duel_id: 16, 
accept: nil> 
pry(main)> Dueler.find(25) 
id: 25, 
user_id: 15, 
challenge_id: 192, 
created_at: Wed, 03 Aug 2016 19:01:46 EDT -04:00, 
updated_at: Wed, 03 Aug 2016 19:01:46 EDT -04:00, 
duel_id: 16, 
accept: nil> 
[15] pry(main)> 

ユーザが@duelerためsubmitをクリック

@duelerは次に1)更新及び2)バック決闘/ショーへリダイレクトすべきです。

class DuelsController < ApplicationController 
    before_action :set_duel, only: [:show, :edit, :update] 
    respond_to :html 

    def show 
    @dueler = Dueler.find_by(user_id: current_user.id) 
    respond_with(@duel) 
    end 

    def create 
    @duel = Duel.new(duel_params) 
    @duel.save 
    redirect_to duel_request_url(@duel) 
    end 

    private 
    def set_duel 
     @duel = Duel.find(params[:id]) 
    end 

    def duel_params 
     params.require(:duel).permit(:consequence, :reward, duelers_attributes: [:id, :user_id, :challenge_id, :accept]) 
    end 
end 

duels_controller.rb決闘/

<% @duel.duelers.each do |dueler| %> 
    <%= dueler.user.name %> <%= dueler.user.last_name %> will <%= dueler.challenge.name %> 
<% end %> 

The loser(s) will <%= @duel.consequence %><br><br> 
If everyone succeeds they will <%= @duel.reward %><br><br> 

<%= form_for @dueler, :url => { :controller => "duels", :action => "show" }, :html => {:method => :post} do |f| %> 
    Accept? <%= f.check_box :accept %> 
    <%= f.submit %> 
<% end %> 

を示ししかし、その代わりにsubmit時に私はエラーを取得:Routing Error No route matches [POST] "/duels/13"。あなたはdocumentationを見てみる場合は、resourcesを作成するためのPOSTルートを作成します

<%= form_for @dueler, :url => { :controller => "duels", :action => "show" }, :html => {:method => :patch} do |f| %> 

:routes.rbをであなたがpatchにあなたの方法を変更したいresources :duelers resources :duels

答えて

0

あります。更新の場合はPATCHメソッドが使用されます。

関連する問題