2012-02-10 61 views
0

我有一个由模型对象生成的表单。对模型表单的验证

<%= 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 

我如何验证呢?

回答

1

如果我正确理解你的问题,你想知道如何验证表单上的提交以及如何显示错误,当有一些?

当前模型中的验证将在您点击提交按钮时验证字段“标题”。所以我认为你在这方面已经很好,因为这似乎是你唯一的一个。

为了让错误在你的意见显示出来,你想用这样的事情是你的表格:

<%= 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显示用户可以理解的句子中的每个错误。

2

我的Rails的经验主要是与2.3.14版本,所以我不能100%肯定这一点,但它看起来像f.error_messages在Rails的贬值3.0版

这是否前一个问题的帮助? f.error_messages in Rails 3.0

编辑:基本上我在说的是它看起来像你试图以旧的方式显示错误,这可能与您的Rails版本不兼容。我在上面发布的链接有几点建议。