在一个地方显示Rails错误,通知和设计消息

时间:2015-11-09 08:48:21

标签: ruby-on-rails ruby devise erb

我的application.html.erb文件位于以下代码中:

<% if notice %>
 <p class="notice"><%= notice %></p>
<% elsif alert %>
 <p class="alert"><%= alert %></p>
<% end %>
<%= devise_error_messages! %>

一切都很棒,但表格验证是通过使用(像往常一样)来完成的:

<%= form_for @project do |f| %>
    <% if @project.errors.any? %>
        <h2><%= pluralize(@project.errors.count, "error") %> prevented this project from saving:</h2>
        <ul>
            <% @project.errors.full_messages.each do |msg| %>
                <li><%= msg %></li>
            <% end %>
        </ul>
    <% end %>

...

<% end %>

如何将它们纳入主应用页面&amp;让他们永远在顶部?

2 个答案:

答案 0 :(得分:1)

  

如何将它们纳入主应用页面&amp;让他们永远在顶部?

这比仅添加partial(建议为Umang Raghuvanshi)更深入。

问题是errors方法是@object的一部分,这意味着每当要输出{{1}中的错误时,您必须确保能够访问此对象。 }}

部分永远不会依赖于application.html.erb - 它们应该被加载到您应用的任何部分。您可以将local variables传递给他们,允许您根据需要发送预定义数据。

在您的情况下,我会使用部分使用content_for填充它:

-

这就是我要做的事情:

@instance_variables

这将允许您将#app/views/layouts/application.html.erb <%= render partial: "shared/errors" %> #app/views/shared/_errors.html.erb <%= content_tag :div, class: "errors" do %> <% if errors.try?(:any?) %> <% errors.full_messages.each do |msg| %> <%= content_tag :li, msg %> <% end %> <% else %> <% flash = %w(notice error alert) %> <% flash.each do |f| %> <%= content_tag :div, class: f, flash => [f.to_sym] if flash[f.to_sym] %> <% end %> <%= devise_error_messages! %> <% end %> <% end %> #app/views/projects/new.html.erb <%= form_for @project do |f| %> <%= render "shared/errors", locals: {errors: @project.errors} %> <% end %> div的样式设置为绝对位于顶部:

JSFiddle

.errors

答案 1 :(得分:0)

将代码解压缩为部分代码并将其包含在application.html.erb

_your_partial_name.erb

<% if @project.errors.any? %>
        <h2><%= pluralize(@project.errors.count, "error") %> prevented this project from saving:</h2>
        <ul>
            <% @project.errors.full_messages.each do |msg| %>
                <li><%= msg %></li>
            <% end %>
        </ul>
    <% end %>

application.html.erb

<%= render partial: 'your-partial-name' %>
<% if notice %>
 <p class="notice"><%= notice %></p>
<% elsif alert %>
 <p class="alert"><%= alert %></p>
<% end %>
<%= devise_error_messages! %>

您也可以尝试使用闪光灯。