模型表格的验证

时间:2012-02-10 01:27:31

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1

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

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

我该如何验证?

2 个答案:

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