我在同一视图中构建了一个具有来自不同模型的多个表单的各种仪表板。我的目标是让每个表单的所有错误消息都在仪表板上呈现。仪表板是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
重申一点,我正在尝试这样做,以便所有错误都会显示在仪表板页面上而不会破坏网站。如果您想了解更多信息,请与我们联系。
答案 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]