2012-03-29 4 views
0

私のRailsアプリケーションで何か変わったことが起こっています。私がコントローラの1つに更新コマンドを送信しようとすると、何らかの理由で送信ボタンがいくつかのパラメータを変更しているように見えます。Rails 3 View/Controller:変更パラメータの送信または更新が渡されましたか? ( "New" works)

私はネストされたリソースを使用しており、参加者を持つレースを設定しています。ものすごく単純。しかし何らかの理由で、参加者を更新しようとすると、race_idの値が参加者のid(:id)に変更されます。

更新時にのみ行いますが。非常に同じフォームを使って完全に新しい参加者を作ることができるようですし、非常に同じ送信ボタンです。ここで

は、関連するコードの一部です:なぜそれ

class ParticipantsController < ApplicationController 
    before_filter :authenticate_user!, :only => [:edit, :update, :destroy, :create, :new] 
    before_filter :set_up_race 

... 

    def create 
     @participant = @race.participants.new(params[:participant]) 
     if @participant.save 
      redirect_to setup_race_path(@race), :notice => "Successfully created participant." 
     else 
      render :action => 'new' 
     end 
    end 

... 

    def update 
     @participant = Participant.find(params[:id]) 
     if @participant.update_attributes(params[:participant]) 
      redirect_to setup_race_path(@race), :notice => "Successfully updated participant." 
     else 
      render :action => 'edit' 
     end 
    end 

... 

    def set_up_race 
     @race = Race.find(params[:race_id]) 
    end 
end 

(新規および更新で使用される)_form.rb

<%= form_for ([:race, @participant]) do |f| %> 
    <%= f.error_messages %> 
    <p> 
     <%= f.label :name %><br /> 
     <%= f.text_field :name %> 
    </p> 
    <p><%= f.submit %></p> 
<% end %> 

participants_controller.rbはここですパラメータが変更されているようです: _form.rb画面が私に伝え<%= params[:race_id] %> を含めるファイル

私は私が手提出クリック3

ID = 25

要求

パラメータと人種が見つかりませんでした:

を "authenticity_token" => "4VCZP9sI/iv8n454I8AE76n5vLiwGayuXc1NrPYfz"

{"utf8" => "✓"、 "_method" => "put" 「race_id」=>「25」、「id」=>「25」}、「Gc =」、 「参加者」=> {「名前」=>「hgdjhgf」}「コミット」=>「参加者の更新」

(私が提出をクリックした後にパラメータ「raid_id」=>「25」に表示されているように、ページはもともとrace_id =>「3」(上記で証明済みです。フォームをクラッシュさせる))。

だからこそ、なぜ、race_idがビューとコントローラの間のどこかで変わるのですか?

編集:ここですくいルート出力はジェフの要求ごとのように、です: http://dylancodes.net/personal/ARTk/images/routes.png

+0

アップデートのために "set_up_race"を実行しないで(:のみを使用して他のすべての機能を実行させて)、@race = Race.find(@ participant.race_id)をしかし、それは良い解決策ではありません。さらに、race_idが変更されている理由を説明していません。 – DRobinson

+0

あなたのルートはどのように見えますか? 'レーキルート'の出力を含めることができますか? –

+0

ええ、私はそれを投稿します。しかし、私はすべてのページが正しく読み込まれているように見えます。それは、ビューで保持されているパラメータとコントローラーで保持されているパラメータの間にちょうど不一致があることを意味します(送信ボタンの編集:race_id)。ルート出力は次のとおりです:http://dylancodes.net/personal/ARTk/images/routes.png – DRobinson

答えて

1

何URLがフォームにに掲示されていることのように見えるのでしょうか?あなたのルートに基づいて、私はそれが/races/3/participants/25のように見えると期待します。私が何を読んでから、ライン

form_for ([:race, @participant]) do |f| 

/races/participants/25ようになりnamespaced routeを(そのページの「名前空間」で検索)を作成します。

この行を変更することはできますか?

form_for [@race, @particpant] do |f| 

フォームURLを/races/:race_id/participants/:idとする必要があります。

+0

ワウ。正直なところ、私はそれを理由で変更したと思っていました(実際は結腸には意味がありませんでした)。しかし、それは実際にはタイプミスのようです。ありがとう、それは働いた。 – DRobinson

関連する問題