2012-04-22 10 views
0

どのようにしてリダイレクトがレールで機能しますか?私は非常に直観的でイライラしていることがわかります。Rails 3 redirectioning

def custom 

end 

私はroutes.rbをして、次のしている:私のコントローラで

resources :mymodel do 
    member do 
     get 'custom' 
    end 
    end 

は、私がレンダリングしよう/views/mymodels/custom.html.erb

私が追加したビューファイルは、私は空のコントローラメソッドを持っていますモデル作成時のカスタムビュー:

respond_to do |format| 
    if @presentation.save 
    redirect_to action: "custom" 
    #format.html { redirect_to @mymodel, notice: 'Presentation was successfully created.'} 
    #format.json { render json: @mymodel, status: :created, location: @mymodel } 

これにより、リダイレクトによって空白のページが表示されます。しかし、ブラウジング/mymodels/[id]/customは正常に動作します。私は間違って何をしていますか? render :action => "custom"のどちらも機能しないのはなぜですか?

EDIT:

これは動作します:format.html { render action: "upload" }が、なぜ?

答えて

2

なぜformat.html {...}句についてコメントしましたか?それを使用します。

の代わり:

if @presentation.save 
    redirect_to action: "custom" 
    #format.html { redirect_to @mymodel, notice: 'Presentation was successfully created.'} 

書き込みこの:

if @presentation.save 
    format.html { redirect_to action: "custom" } 
+0

なぜ平野redirect_toが動作しませんか? – Fdr

+0

あなたは 'respond_to'ブロックの中に置いたからです。このブロックをコメントし、あなたの 'redirect_to'をその外側に移動して確認してください。あなたが期待している通りに、すべてが機能するはずです。 – jdoe

+1

しかし、あなたは 'respond_to'から出てくるこの動きはちょうど楽しいものでなければならないことを理解しなければなりません。実世界のアプリケーションでは、レスポンダを使用する必要があります。これは読みやすく、RESTfulです。単一のリソースをさまざまな表現で表現するMVCに準拠したアプローチです。こうすることで、 'Product'のようにjson/xml/other形式で新しいアクションを追加したり、ルートやその他のものを変更することなく簡単に表現することができます。 – jdoe