2012-02-10 10 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

あなたの質問が正しく理解されている場合は、投稿時にフォームの検証方法といくつかのエラーが表示されたらどうすればよいですか?

あなたのモデルで現在行っている検証では、送信ボタンを押すと、フィールド "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 %> 

これは、エレガントな方法で、すべてのエラーを処理します。 2つ以上のエラーがある場合、pluralizeメソッドはエラーwordの複数化を処理するので、「2 errorsによってこれが保存されないようにする」のような文章が読み込まれます。そうすれば、フィールドを増やすことに決めたら、すでにいいですね。

次に、pages.errors.full_messagesは、各エラーをユーザーが理解できる文章で表示します。

2

私のRailsの経験がほとんどバージョン2.3.14であるので、私はこの約100%確認することはできませんが、f.error_messagesはRailsの中で減価償却されたように見えるバージョン3.0

この前の質問の助けをしていますか? f.error_messages in Rails 3.0

編集:基本的には、あなたが以前の方法でエラーを表示しようとしているようですが、おそらくRailsのバージョンと互換性がありません。上記のリンクにはいくつかの提案があります。