Rails一个视图中的多个表单呈现错误问题

时间:2011-09-12 21:57:15

标签: ruby-on-rails ruby-on-rails-3 forms

我在同一视图中构建了一个具有来自不同模型的多个表单的各种仪表板。我的目标是让每个表单的所有错误消息都在仪表板上呈现。仪表板是PagesController的一部分,表单属于其他控制器。

目前所有表格都很棒。但是,发生错误时,它们会在其他视图中呈现,而不是仪表板。当我试图“渲染”仪表板页面上的错误时,我得到的错误是其他表单的模型丢失了。

在仪表板视图之外呈现的“渲染”示例。

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

重申一点,我正在尝试这样做,以便所有错误都会显示在仪表板页面上而不会破坏网站。如果您想了解更多信息,请与我们联系。

1 个答案:

答案 0 :(得分: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或你表单中的任何东西: (以haml为单位)

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