2012-02-14 9 views
0

私はarticle.saveがユーザーの入力が無効であるために失敗したときに、私のarticle_controller.rbの作成メソッドがインデックスにリダイレクトされているという問題があります。記事作成URLは/ articles/newですが、投稿が失敗すると/ articlesにリダイレクトされます。このフォームは/ articles/newと同じように/ articlesで利用できます。希望の動作は、ユーザーがフォームに再入力した可能性のあるものを/ articles/newに戻すことです。これを行う方法はありますか?ここでは、何が起こっているのかを示すためのコードスニペットをいくつか示します。ここでRails 3はインデックスにリダイレクトするメソッドを作成しますか?

def new 
    @article = Article.new 

    respond_to do |format| 
     format.html 
    end 
    end 

記事はメソッドを作成されています:

<%= form_for(@article) do |f| %> 
..... 
<% end %> 

私は最終的に願っています:ここで

def create 
    @article = current_user.articles.new(params[:article]) 

    respond_to do |format| 
     if @article.save 
     format.html { redirect_to(@article, :notice => 'Article was successfully created.') } 
     else 
     format.html { render 'new' } 
     end 
    end 
    end 

が形です。ここ

は記事新しい方法であり、 form_forでremote =>:trueを呼び出すだけで、これを動作させることができますが、最初にそれを動作させたいと思っています。助言がありますか?

答えて

2

format.html { render :action => "new" } 
+0

が、私はこれが正しいコードであると信じ、そして舞台裏で、それは* *私の形でcalles new.html.erbファイルを、レンダリングしている、しかし、RESTfulなURLはまだ記事/として来ています、/articles/newではありません。なぜこれが起こっているかもしれないのか? – botbot

+0

テンプレートをレンダリングすることは、コントローラコード/メソッド(new)を実行することなく、単に「ページをレンダリング」することです。 http://blog.markusproject.org/?p=3313 – rajibchowdhury

+0

このリンクの記事は、この状況ではcreateメソッドがnew.htmlを再レンダリングしているので、私はredirect_toではなくrenderを使用したいと言っているのは正しいです。ユーザーが何を入力したかを失うことなくerb。 redirect_toはユーザーが入力した値を失うので、それは私が望むものではありません。 – botbot

1

を試してみて、あなたはRailsの3+を使用している場合は、このDRYようなあなたのコントローラに何かを書いてみてください。

class ArticlesController < ApplicationController 
respond_to :html 

def new 
    @article = Article.new 
    respond_with @article 
end 

def create 
    @article = Article.new(params[:article]) 
    @article.save 
    respond_with(@article) 
end 
end 
+0

ありがとう!私がこのアプローチで見ることができる唯一の問題は、respond_to do | format |を持つすべてのメソッドを変更してコントローラを大幅に変更しなければならないことです。私はあなたが上記の方法でrespond_toを使用していません。私があなたの提案を使用した場合、私はxml、js、jsonなどのフォーマットをチェックする方法を知らないでしょう... "if format.js ..."のようなフォーマットの条件付きをまだ持つことができますか?ありがとう、私はこれを試してみますが、私は働いているものを作る方法があるという気持ちがあります。@ article.saveがfalseを返す場合、respond_with paramは/ articles/newと* not */articlesに返信しますか? – botbot

+0

"@ article.saveがfalseを返した場合、respond_with paramが/ articles/newに、/ articles/articleに返信しますか?はい – rajibchowdhury

+0

コントローラメソッド用のカスタムXML JSONが必要な場合は、RABL https://github.com/nesquena/rabl gem available – rajibchowdhury

関連する問題