我有一个由模型对象生成的表单。
<%= form_for(@pages) do |f| %>
<p>
<%= f.label :title %><br />
<%= f.text_field :title %>
</p>
<% end %>
以下是控制器方法:
def new
@pages = Page.new
respond_to do |format|
format.html # new.html.erb
format.json { render :json => @post }
end
end
以下是型号代码:
class Page < ActiveRecord::Base
validates :title, :presence => true
end
现在,如何在提交时验证表单。(我知道提交按钮不存在,我将在稍后添加)。我在表单中使用了<%= f.error_messages %>
,但它给了我错误:
NoMethodError in Pages#new
Showing C:/rorapp/app/views/pages/_form.html.erb where line #2 raised:
undefined method `error_messages' for #<ActionView::Helpers::FormBuilder:0x49b9ca8>
Extracted source (around line #2):
1: <%= form_for(@pages) do |f| %>
2: <%= f.error_messages %>
3: <p>
4: <%= f.label :title %><br />
5: <%= f.text_field :title %>
Trace of template inclusion: app/views/pages/new.html.erb
Rails.root: C:/rorapp
Application Trace | Framework Trace | Full Trace
app/views/pages/_form.html.erb:2:in `block in _app_views_pages__form_html_erb__975660997_39217440'
app/views/pages/_form.html.erb:1:in `_app_views_pages__form_html_erb__975660997_39217440'
app/views/pages/new.html.erb:2:in `_app_views_pages_new_html_erb___256256638_47476836'
app/controllers/pages_controller.rb:11:in `new'
Request
Parameters:
{"title"=>"",
"author"=>"",
"email"=>"",
"body"=>"",
"reference"=>"Google"}
Show session dump
Show env dump
Response
Headers:
None
我该如何验证?
答案 0 :(得分:2)
我的Rails体验主要是版本2.3.14,所以我无法100%确定这一点,但看起来f.error_messages在Rails 3.0版中被折旧
这个上一个问题有帮助吗? f.error_messages in Rails 3.0
编辑:基本上我所说的看起来你似乎试图以旧的方式显示错误,这可能与你的Rails版本不兼容。我上面发布的链接有一些建议。
答案 1 :(得分:1)
如果我正确理解您的问题,您想知道如何在提交时验证表单以及如何在存在时显示错误?
当您点击提交按钮时,模型中的验证当前将验证字段“title”。因此,我认为你在这方面已经很好,因为这似乎是你唯一的一个。
要在您的观看中显示错误,您希望使用类似这样的内容:
<%= form_for @pages do |f| %>
<h2><%= "#{pluralize(@pages.errors.count, "error")} prohibited this from being saved:" %></h2>
<% @pages.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<p>
<%= f.label :title %><br />
<%= f.text_field :title %>
</p>
<% end %>
以优雅的方式处理任何错误。如果存在多个错误,pluralize
方法会处理单词错误的复数,因此该句子会显示“2错误已禁止保存此错误”。这样,如果您决定添加更多字段,那么您已经很好了。
然后pages.errors.full_messages
会在句子中显示用户可以理解的每个错误。