0

たとえば、ユーザーが既に使用されているユーザー名または電子メールを入力した場合、モデルの検証からエラーを表示するにはどうすればよいですか? 私が使用している検証は機能し、検証によってページの作成が停止された場合でも、ページは適切にレンダリングされます。ただし、ユーザーにエラーを表示するにはどうすればよいですか。ページのどこでも構いません。:message => "The Username/Email is already in use" を使用できることはわかっています。しかし、これをより具体的にするにはどうすればよいですか、エラーを検証チェックから直接発生させるにはどうすればよいですか。

class User < ActiveRecord::Base
  authenticates_with_sorcery! 

  attr_accessible :username, :password, :email

  validates_presence_of :email
  validates_presence_of :password
  validates_presence_of :username
  validates_uniqueness_of :email
  validates_uniqueness_of :username
  validates_uniqueness_of :password
  validates_confirmation_of :password

end
4

2 に答える 2

1

レコードを保存または作成しようとすると、検証エラーが保存されます。

@user.errors検証エラーを取得して表示するために使用できます。Rails Guide for validationsで詳細を確認できます。

これらはデフォルトのメッセージを使用しますが、変更することで改善できますconfig/locales/en.yml

いくつかのコード例:

<% @user.errors.full_messages.each do |msg| %>
  <div class="error"><%= msg %></div>
<% end %>

たとえば、電子メールの検証メッセージをカスタマイズする場合はconfig/locales/en.yml、以下を開いて追加しますen:

  activerecord:
    errors:
      models:
        user:
          attributes:
            email:
              taken: "has already been taken"
于 2013-01-23T18:44:21.753 に答える
0

validates_uniqueness_of

Validates whether the value of the specified attributes are unique across the system. 
Useful for making sure that only one user can be named “davidhh”.

また、スコープ パラメーターに基づいて、指定された属性の値が一意であるかどうかを検証することもできます。

class Person < ActiveRecord::Base
  validates_uniqueness_of :user_name, :scope => :account_id
end

編集

質問を読み違えました。ダニエルの答えは正しいです。

于 2013-01-23T18:40:42.237 に答える