0

ビューの作成または編集に検証エラーを表示する方法がわかりません。

私のモデルには次のものがあります。

 class Person < ActiveRecord::Base
   attr_accessible :first_name, :last_name

 belongs_to :organization

   validates_presence_of :first_name,  :message => "First name can't be blank"
   validates_presence_of :last_name,  :message => "Last name can't be blank"

私のコントローラーには

def update
    @person = Person.find(params[:id])
        if @person.update_attributes(params[:person])
       redirect_to(:action => 'list')
    else
      render('edit')
    end
  end

私の見解では、

<div>
<%= form_for(:person, :url => {:action => 'update', :id => @person.id}) do |f| %>
<%= f.errors %>

<table>

    <tr>
        <th>First Name:</th>
        <td><%= f.text_field(:first_name) %></td>
    </tr>
    <tr>
        <th>Last Name:</th>
        <td><%= f.text_field(:last_name) %></td>
    </tr>
</table>

    <div>
    <%= submit_tag("Update Person") %>
       </div>
<% end %>
</div>

名フィールドを空白のままにしてブラウザーで検証をテストすると、レコードは保存されず、編集にリダイレクトされますが、検証エラーは表示されません。ただし、次を使用してコンソールで試してみると:

f = Person.find(1)
#returns record
f.first_name = “”
#returns “”
f.save
#returns false 
f.errors
#returns @message = (:first_name => [“First name can't be blank”])

そのため、コンソールでは機能しますが、ブラウザーでは機能しません。私は何を間違っていますか?

4

3 に答える 3

0

エラーメッセージを表示するために間違った方法を使用しています。そうでは<%= f.error_messages %>ありません<%= f.errors %>。このリンクを見てください rails_rendering_errors

于 2012-11-24T17:35:35.047 に答える
0

lynda.com と K. Skoglund の助けを借りて、エラーを修正する方法を見つけました。まず、エラー メッセージを処理するパーシャルを作成しました

<% if object && object.errors.size > 0 %>
    <div>
        <h2><%= pluralize(object.errors.size, "error") %> 
        prohibited this record from being saved</h2>
        <p>There were problems with the following fields:</p>
        <ul>
        <% object.errors.full_messages.each do |msg| %>
            <li><%= msg %></li>
        <% end %>
        </ul>
      </div>
     <% end %>

次に、フォームで呼び出すヘルパー メソッドを作成しました。

def error_messages_for (object)
  render(:partial => 'shared/error_messages', 
  :locals => {:object => object})
end

最後に、編集テンプレートと新しいテンプレートの両方に使用するために作成したフォーム パーシャルの上部にヘルパー メソッドを追加しました。

<%= error_messages_for(@person) %>
<table>
    <tr>
        <th>First Name:</th>
        <td><%= f.text_field(:first_name) %></td>
    </tr>
    <tr>
        <th>Last Name:</th>
        <td><%= f.text_field(:last_name) %></td>
    </tr>

    </table>
于 2012-11-24T21:20:43.953 に答える
0

それはあなたの質問に直接答えるものではありませんが、「レールを使用したアジャイル開発」タイプのコードを書くのをやめることを強くお勧めします。次のような優れた宝石に慣れてください。

  • まともな露出
  • シンプルフォーム
  • ハムレール

シンプルなことをするためにボイラープレートコードを大量に書くのはやめましょう。

于 2012-11-25T14:17:22.407 に答える