ruby on railsで同じページに複数のpost情報を作る


ruby on railsで  
同じhtmlファイルにひとつのactionしか呼び出されなくて困ってます。

[code]

    # routes.rb
    match 'users' => 'users#hoge',:via => :post 
    match 'users' => 'users#foo', :via => :post
    
    # users view
    form_for @users, :url => {:action => 'hoge'} do |f|
      f.email
      f.hoge
     .
     .
     .      
      submit  
     end 
    
    form_for @users, :url => {:action => 'foo'} do |f|
      f.email
      f.hoge
     .
     .
     .      
      submit  
    end   
    
[/code]

こう指定してみましたが呼ばれませんでした。  
これだとhoge actionしか呼ばれなかったです。  
同じページにpostアクションを２つつけることはできないでしょうか？




## 期待通りの動作にならない理由

> <http://railsguides.jp/routing.html>
>
> Railsのルーティングは、ルーティングファイルの「上からの記載順に」マッチします。このため、たとえばresources
> :photosというルーティングがget
> 'photos/poll'よりも前の行にあれば、resources行のshowアクションがget行の記述よりも優先されますので、get行のルーティングは有効になりません。

`rake routes`などでルーティングを確認すると。２つの定義はどちらも  
`POST /users(.:format)`となっていて、衝突しているためです。

## 解決の一例

こういった記述が保守的な観点から好ましいかどうかは別として。

[code]

    match 'users/hoge' => 'users#hoge',:via => :post
    match 'users/foo'  => 'users#hoge',:via => :post
    
[/code]

とすることで

[code]

    users_hoge POST   /users/hoge(.:format)
    users_foo  POST   /users/foo(.:format)
    
[/code]

という結果が得られます。`match 'users/:action'`という方法もありますが  
そちらの方法は、上で引用した railsguides.jp の内容を確認してください。

そして、form_forには

[code]

    form_for @users, url: users_hoge_path
    form_for @users, url: users_foo_path
    
[/code]

とすれば良いでしょう。

