3

RESTfulリソース、デフォルトタイプのルート。イベントの作成は次のように機能するはずです。

def create
    @event = current_user.events.build(params[:event])
    if @event.save
        redirect_to @event, :flash => { :success => "Event created!" }
    else
        render :action => "new" # new_event_path
    end
end

無効なデータが入力されると、「新しい」ビュー/フォーム再度レンダリングされますが、「インデックス」アクション/ビューがオンになっている「localhost:3000/events」URLでこのビューがレンダリングされます。

私のイベントルートは、かなり予測可能である必要があるようです。

    resources :events

Capybara 2にアップデートし、DatabaseCleanerの使用を開始し、JS対応機能のテストに備えてtransactional_fixturesをfalseに設定しましたが、これを詰め込んだ他の方法は考えられません。

このような奇妙なルーティングの混乱を引き起こす可能性のある、私が見逃しているいくつかの単純なものはありますか?

アイデア、誰か、どこからトラブルシューティングを開始するか?

4

2 に答える 2

1

これは正しい動作です。何が起こっているのかというと、作成アクションを発行するときにそのURLにPOSTメソッドを使用しているということです。URLでGETを使用すると、インデックスアクションになります。また、別のテンプレートをレンダリングしてもURLは変更されないことに注意してください(リダイレクトが必要になります)。

Railsルーティングドキュメントのセクション2.2を確認してください:http: //guides.rubyonrails.org/routing.html

于 2013-01-29T04:03:42.483 に答える
0

フォームの送信からイベントを作成するときは、post メソッドを使用して /events ルートに送信します。データが無効になると、/events アドレスの /events(POST) リクエストに対して、Rails が events/new をレンダリングします。

でも君ならできる

redirect_to action: "new", event: @event.attributes  

新しいアクションに追加

@item = Item.new(params[:item].except('protected attributes','created_at', 'updated_at', 'id'))    
于 2013-01-29T04:41:28.960 に答える