2

複数の Shift オブジェクトを編集する form_tag をまとめようとしています。フォームが適切に作成されており、正しいパラメーターが渡されています。コンソールでオブジェクトを正しく更新すると、パラメーターが機能することを確認しました。ただし、送信ボタンをクリックすると、次のエラーが表示されます。

ActiveRecord::RecordNotFound in ShiftsController#update_individual
Couldn't find Shift without an ID

呼び出しているコントローラーのルートは次のようになります。

map.resources :shifts, :collection => { :update_individual => :put }

ShiftsController のメソッドは次のとおりです。

def update_individual
  Shift.update(params[:shifts].keys, params[:shifts].values)
  flash[:notice] = "Schedule saved"
end

関連するフォーム パーツは次のとおりです。

<% form_tag( update_individual_shifts_path ) do %> 
  ... (fields for...)
  <%= submit_tag "Save" %>  
<% end %>

なぜこれが機能しないのですか?「http://localhost:3000/shifts/update_individual/5」(または既存のシフトに対応する任意の番号) の URL を参照すると、パラメーターが設定されていないという適切なエラーが表示されますが、パラメーターを渡すとなんらかの ID がないと、エラーになります。

URL の末尾にある ID の検索を停止するにはどうすればよいですか?

4

2 に答える 2

1

POST の代わりに PUT を使用することをフォームタグヘルパーに伝える必要があると思います

<% form_tag( update_individual_shifts_path, :method => :put) do %>
  ... fields ....
  <%= submit_tag "Save" %>
<% end %>
于 2010-03-31T19:42:08.773 に答える
0

驚くべきことに、メソッドの名前を変更してダミー変数を渡すことで、これを修正できたことがわかりました。変更は次の行にありました。

form.html.erb:

<% form_tag( poop_individual_shifts_path ) do %>

ルート.rb:

map.poop_individual_shifts "poop_shifts", :controller => 'shifts', :action => "poop_individual", :method => "put", :id => 4
map.resources :shifts 

そこで毎回 ID 4 を渡しますが、それは問題ではありません。移動して取得したシフト オブジェクトで実際には何もしていません。ただ...わかりません。ハックだと思います。

shifts_controller.rb:

def poop_individual
于 2010-04-01T15:41:13.657 に答える