これが私のルートです:
root :to => 'sites#index'
match 'sites' => 'sites#index'
match 'sites/:site' => 'sites#show'
match 'sites/:site/publish' => 'sites#publish', :via => :get
match 'sites/:site/publish' => 'sites#push', :via => :put
match 'sites/:site/:entity_type' => 'entity#index'
match 'sites/:site/:entity_type/new' => 'entity#new', :via => :get
match 'sites/:site/:entity_type/new' => 'entity#create', :via => :put
match 'sites/:site/:entity_type/:entity_name' => 'entity#edit', :via => :get
match 'sites/:site/:entity_type/:entity_name' => 'entity#update', :via => :put
私が抱えている問題は、パブリッシュ ルートの POST を実行すると、実際にはアクション メソッドがまったく呼び出されないことです。「entity_type_パラメーター(指定しないでください)が「公開」に設定されていると記載されています。
これが私のフォームです:
<%= form_tag({:controller => 'sites', :action => 'publish'}) do %>
<%= hidden_field_tag 'site', params[:site] %>
<%= submit_tag 'Publish' %>
<% end %>
実際には、隠しフィールドを指定する必要はありません。これはルートの結果として行われるからです。[公開] をクリックすると、次のようになります。
Started POST "/sites/kieransenior/publish" for 127.0.0.1 at 2012-05-14 20:35:48 +0100
Processing by EntityController#index as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"bCooYei5XTbfNv4MwXqrYAvBzazdcCZpHr7HufKPcxo=", "site"=>"kieransenior", "commit"=>"Publish", "entity_type"=>"publish"}
Completed 500 Internal Server Error in 1ms
HTML フォームは次のようになります (わかりやすくするため)。
<form accept-charset="UTF-8" action="/sites/kieransenior/publish" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /><input name="authenticity_token" type="hidden" value="bCooYei5XTbfNv4MwXqrYAvBzazdcCZpHr7HufKPcxo=" /></div>
<input id="site" name="site" type="hidden" value="kieransenior" />
<input name="commit" type="submit" value="Publish" />
</form>
間違った場所に投稿するために何が間違っていますか? フォームが正しいので、それを行っているのは私のルーティングであるに違いありません。
編集
プッシュのコントローラー アクション:
def push
respond_to do |format|
redirect_to :controller => 'sites', :action => 'show', :site => params[:site]
end
end
上記をスクラップしてください。脳がねじ込まれていれば役立ちます。ある時点でredirect_toをそこにダンプし、respond_toを削除しなかったようです。おっと。