我的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;让他们永远在顶部?
答案 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的样式设置为绝对位于顶部:
.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! %>
您也可以尝试使用闪光灯。