【问题标题】:validations for the model form模型表单的验证
【发布时间】:2012-02-11 13:49:17
【问题描述】:

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

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

现在,我如何在提交时验证表单。(我知道提交按钮不存在,我稍后会添加它)。我在表格中使用了&lt;%= f.error_messages %&gt;,但它给了我错误:

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

如何验证它?

【问题讨论】:

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


    【解决方案1】:

    我的 Rails 体验主要是使用 2.3.14 版,所以我不能 100% 确定这一点,但看起来 f.error_messages 在 Rails 3.0 版中已被贬低

    上一个问题有帮助吗? f.error_messages in Rails 3.0

    编辑:基本上我要说的是,您似乎正在尝试以旧方式显示错误,这可能与您的 Rails 版本不兼容。我在上面发布的链接有一些建议。

    【讨论】:

      【解决方案2】:

      如果我正确理解了您的问题,您想知道如何在提交时验证表单以及在出现错误时如何显示错误?

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

      要让错误显示在您的视图中,您需要使用如下形式:

      <%= 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 方法会处理单词 error 的复数形式,因此句子的内容类似于“2 个错误已禁止保存此内容”。这样一来,如果您决定添加更多字段,您就可以开始了。

      然后pages.errors.full_messages 在用户可以理解的句子中显示每个错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-13
        • 2019-05-02
        • 1970-01-01
        • 2012-07-21
        • 1970-01-01
        • 2017-06-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多