Cra*_*ham 42 ruby ruby-on-rails ruby-on-rails-3
Rails 3.0已弃用f.error_messages
,现在需要插件才能正常工作 - 但我想学习如何以(新)本机方式显示错误消息.我正在按照入门指南进行操作,该指南在实现注释表单时使用了已弃用的方法.例如:
<h2>Add a comment:</h2>
<%= form_for([@post, @post.comments.build]) do |f| %>
<%= f.error_messages %>
<div class="field">
<% f.label :commenter %><br />
<%= f.text_field :commenter %>
</div>
<div class="field">
<%= f.label :body %><br />
<%= f.text_area :body %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
Run Code Online (Sandbox Code Playgroud)
这是正确的方法(由脚手架生成):
<%= form_for(@post) do |f| %>
<% if @post.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:</h2>
<ul>
<% @post.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
. . .
Run Code Online (Sandbox Code Playgroud)
我理解我@post
在后一个例子中使用了变量,但是我在前者中引用了什么变量来获取注释创建的错误消息?
Nic*_*nco 23
在表单中实现error_messages的最佳和最简洁的方法是在FormBuilder中实现error_messages.
例如,这是我为上一个项目实现的error_messages方法.通过实现自己的FormBuilder,您可以遵循webdesigner的规则和样式......以下是一个示例,它将输出ul/li中的错误列表以及一些自定义样式:
class StandardBuilder < ActionView::Helpers::FormBuilder
def error_messages
return unless object.respond_to?(:errors) && object.errors.any?
errors_list = ""
errors_list << @template.content_tag(:span, "There are errors!", :class => "title-error")
errors_list << object.errors.full_messages.map { |message| @template.content_tag(:li, message) }.join("\n")
@template.content_tag(:ul, errors_list.html_safe, :class => "error-recap round-border")
end
end
Run Code Online (Sandbox Code Playgroud)
然后在我的表格中:
= f.error_messages
Run Code Online (Sandbox Code Playgroud)
就这样.
Luk*_*kas 13
我很确定你需要做的就是参考 @post.comments
所以你可以这样做:
<% @post.comments.each do |comment| %>
<% if comment.errors.any? %>
<% comment.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
<% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
或者只是将所有错误拉出来:
comment_errors = @post.comments.map(&:errors)
Run Code Online (Sandbox Code Playgroud)
然后在显示逻辑中循环它们以输出每个注释错误.
此功能作为独立的gem dynamic_form存在.
将以下内容添加到您的 Gemfile
gem 'dynamic_form'
Run Code Online (Sandbox Code Playgroud)
从github页面:
DynamicForm拥有一些帮助您处理Rails3模型的帮助方法,它们是:
input(record, method, options = {})
form(record, options = {})
error_message_on(object, method, options={})
error_messages_for(record, options={})
它还增加了f.error_messages
和f.error_message_on
你的形式建设者.
归档时间: |
|
查看次数: |
34853 次 |
最近记录: |