2011-09-12 10 views
1

同じビューで異なるモデルの複数のフォームを持つソートのダッシュボードを作成しました。私の目標は、各フォームのすべてのエラーメッセージをダッシュ​​ボードに表示させることです。ダッシュボードはPagesControllerの一部であり、フォームは他のコントローラに属します。Rails複数のフォームを1つのビューでレンダリングエラーを発行する

現在、すべてのフォームがうまく機能しています。ただし、エラーが発生すると、ダッシュボードではなく他のビューでレンダリングされます。ダッシュボードページのエラーを「レンダリング」しようとすると、他のフォームのモデルが欠落しているというエラーが表示されます。

ダッシュボードビューの外でレンダリングする「レンダリング」の例。

class NotesController < ApplicationController 
    def create 
     @note = Note.new(params[:note]) 
     if @note.save 
      flash[:notice] = "Note Created!" 
      redirect_to dashboard_path 
     else 
      flash[:alert] = "Note failed" 
      render :action => "new" 
     end 
    end 
end 

ダッシュボードビュー内でエラーをレンダリングする例です。

class NotesController < ApplicationController 
    def create 
     @note = Note.new(params[:note]) 
     if @note.save 
      flash[:notice] = "Note Created!" 
      redirect_to dashboard_path 
     else 
      flash[:alert] = "Note failed" 
      render 'pages/home' 
     end 
    end 
end 

繰り返して、ダッシュボードページにすべてのエラーが表示されるようにしています。あなたがより多くの情報を希望したら教えてください。

答えて

0

あなただけのすべてのフォームを使用し、インスタンス変数にエラーを設定することによって、これを達成することができます

class NotesController < ApplicationController 
    def create 
     @note = Note.new(params[:note]) 
     if @note.save 
      flash[:notice] = "Note Created!" 
      redirect_to dashboard_path 
     else 
      @errors = @note.errors 
      load_home 
      render 'pages/home' 
     end 
    end 

    private 

    def load_home 
     @instances = Model.all 
     @instance_1 = Model.find(1) 
    end 
end 

あなたのすべてのコントローラが@errors = @ model.errorsは、あなたのビューであなただけのようなものを持って設定しますこれは代わりに、あなたの形で持っているものは何でもf.error_messagesかに依存するので:

- unless @errors.nil? 
    #errorExplanation 
    %h2 Please correct these errors 
    %ul 
     - for e in @errors 
     %li= e[1] 
+0

(HAMLに)私が間違ってこれを理解することができるが、私は「ページ/ホーム」をレンダリング使用するときに私の見解は、ロードに失敗しました。私はそれがすべての必要なインスタンス変数がロードされていない 'ページ/家'にすることだと思う。レンダリングはページ/ホームビューをレンダリングしますが、インスタンス変数を持つページ/ホームアクションはレンダリングしないためです。 – jlarry

+0

私はこの宝石、https://github.com/rails/render_componentのようなものが必要なように見えますが、これはレールでこれを行う適切な方法があるかどうかを判断しようとしています。 – jlarry

+0

インスタンス変数の読み込みを行うload_homeプライベートメソッドを作成することができます。 (編集済みの回答) –

関連する問題