0

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パラメータを理解していないようです。


詳細

foob​​arのインデックスページに、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をフォローフォームの送信方法を理解しようとしています。適切なコントローラーの適切な方法に。

4

2 に答える 2

1

あなたが言うように、それはフォームを/ activate_foobarに送信します、何らかの理由で(おそらくhamlバグ)、これをアクションで解決するために:controllerparamを取りません書き込み

:action => 'foobar/activate_foobar'

ただし、絶対ルートではなく相対ルートを使用するため、注意が必要です。したがって、その問題を処理したくない場合は、railsformhelperに変更することをお勧めします

= form_tag(activate_foobar_foobar_index_path, :method => :post) do
于 2013-02-27T19:08:28.097 に答える
0

activate_foobarはfoobarの下にネストされているので、やってみましたか

 :url => activate_foobar_foobar_index_path(@foobar) 

activate_foobarに特定のfoobarを探す場所をrailsに指示する必要があります。

それが役に立てば幸い。

于 2013-02-27T16:34:14.403 に答える