HAMLコードの場合:
%form{:action => "activate_foobar", :method => :post, :controller => "foobar", :url => activate_foobar_foobar_index_path}
%input{:type => "submit", :value => "Activate"}
送信ボタンは
No route matches "/activate_foobar"
「/foobar/activate_foobar」ではなく。urlパラメータを理解していないようです。
詳細
foobarのインデックスページに、foobar_controllerのメソッドactivate_foobarに投稿しようとしているフォームがあります。そのようなオブジェクトがないため、Foobarにはモデルがありません。これはWidgetの特殊なプロパティにすぎません。(ウィジェットにはモデルとメソッド.activate_foobarがあります)
activate_foobar_foobar_indexは、ルートで次のように定義されています。
resources :foobar, :only => [:index] do
collection do
post :activate_foobar
end
end
:rake:routesで確認済み:
activate_foobar_foobar_index POST /foobar/activate_foobar(.:format) {:action=>"activate_foobar", :controller=>"foobar"}
:予想通り。
さらに、簡単な実験:
=link_to "Activate", activate_foobar_foobar_index_path, {:method => :post}
:/ foobar/activate_foobarに正常にルーティングされました
フォームを使用する(simple_form_forや他のモデルベースのソリューションを使用しない)範囲内で、パス「foobar / activate_foobar」をどのように修正しますか?
出典:http://guides.rubyonrails.org/routing.html「Addingmore RESTful Actions」とhttp://www.w3schools.com/html/html_forms.aspをフォローして、フォームの送信方法を理解しようとしています。適切なコントローラーの適切な方法に。