1

最近、Rails 3.1(3.0から)にアップグレードしましたが、何らかの理由でルートの1つが機能しなくなりました。csvファイルを投稿し、アイテムコントローラーによって処理されるフォームがあります。ルートは次のようになります。

  resources :items do 
    member do
      post 'receive'
      post 'show'
    end

    collection do
      post 'csv_import'
      get 'transactions'
      get 'template'
    end
  end

そして、これが私がログに見るものです-それは正しい行動を投稿しているように見えます。

Started POST "/items/csv_import" for 127.0.0.1 at Tue May 08 11:09:52 -0400 2012
  Processing by ItemsController#show as HTML

しかし、それはショーアクションによって処理されています:

ActiveRecord::RecordNotFound in ItemsController#show

Couldn't find Item with id=csv_import

私は私の人生のために私がここで間違っていることを見ることができません。

4

1 に答える 1

5

あなたのpost 'show'行はこれを妨げています。なぜなら、あなたがに投稿するとき/items/csv_import、railsはあなたが意味items/csv_import/showcsv_importていると考え、あなたがインポートしたいアイテムのIDであるからです。を実行するrake routesと、次のような部分が表示されます。

            item POST   /items/:id(.:format)        items#show
csv_import_items POST   /items/csv_import(.:format) items#csv_import

その最初のアイテムはあなたの投稿と一致して/items/csv_importいて、2番目のアイテムにヒットすることはありません。

ブロックを移動してmember do ... endブロックの後に配置するcollection do ... endと、正常に機能するはずです。

post 'show'ただし、とにかく標準のrails / restの規則に反するため、そのメソッドを削除して名前を変更することをお勧めします。

于 2012-05-08T15:51:26.683 に答える