0

Rails 3.2.9 を使用して ROR アプリを作成していますが、アプリのサインアップ ページで次のようなエラー メッセージが表示されます。

    <li>ログインが短すぎます (最小 3 文字)</li><li>メールが短すぎます (最小 7 文字)</li><li>メールが無効です</li><li>パスワードは使用できません x27;空白にしないでください</li><li>パスワードが短すぎます (最小 4 文字)</li><li>パスワードが無効です</li><li>パスワードの確認を空白にすることはできません</li><li>リ>

これらは Active Record Validation のデフォルト メッセージです。(参照: http://guides.rubyonrails.org/active_record_validations_callbacks.html )

このアプリは、以前 Rails 2 で作成され、後で Rails 3 に移行されました。 Rails 3 に従って、 validates_presence_of コマンドを validates : password 、 :presence=>true などに変更しました。ビュー (signup.html.erb) では、error_messages_for がこれらのメッセージをレンダリングしています。これは Rails 3 から廃止されました。ビューで error_messages_for の代わりに何を使用する必要があり、エラー メッセージを正しく表示するためにすべてのコードを適切に変更する必要があるか教えてください。

これがコードです(完全ではありません)

app/model の user.rb

class User < ActiveRecord::Base
  has_many :excel_files         # One user may have many excel files
  has_one  :user_access_validity# One user may have one license period 

  # Virtual attribute for the unencrypted password
  attr_accessor :password

  attr_accessible :login
  attr_accessible :email
  attr_accessible :password
  attr_accessible :password_confirmation
  attr_accessible :company


  #changes of 'validates' in accordance with rails 3:

  validates :login,  :presence => true, 
                        :length => { :within => 3..40}, 
                        :uniqueness => { :case_sensitive => false },
                        :format => { :with =>  /^([a-z_0-9\.]+)$/i },
                        :on => :create, 
                        :if => :is_login_entered?
  validates :email, :presence => true, 
                        :length => { :within => 7..100}, 
                        :uniqueness => { :case_sensitive => false },
                        :format => {:with => /^([a-z]+((\.?)|(_?))[a-z0-9]+@(mindtree.com|rvce.edu.in))$/i},
                        :on => :create,
                        :if => :is_email_entered? 
  validates :company, :presence => true,
                        :format => { :with =>/(mindtree|RVCE)/i},
                        :format => { :with => /^([a-z]+)$/i },
                        :on => :create, 
                        :if => :is_company_entered? 
  #validates_presence_of     :login, :email, :company
 on => :create, :if => :is_login_entered?


   validates :password, :presence => true,
                       :length => { :within => 4..40 },
                       :confirmation => true,
                       :format => { :with => /^([a-z0-9@!#\$]+)$/i },
                       :on => :create,
                       :if => :password_required?



  validates :password_confirmation, :presence => { :if => :password_required? }
  #validates_presence_of     :password_confirmation,      :if => :password_required? 


  before_save :encrypt_password

. . .

signup.html.erb で

    <font color=red>(Fields marked * are mandatory)</font><h3>Sign me up!</h3>

    <br>


   <span class='error'><%= error_messages_for (@user) %></span>
    <%= form_for :user do |f| -%>

    <p><label for="login"><span class='redcolor'>*</span>Login</label><br/>
    <%= f.text_field :login %></p>

    <p><label for="email"><span class='redcolor'>*</span>Email</label><br/>
    <%= f.text_field :email %></p>

    <p><label for="password"><span class='redcolor'>*</span>Password</label><br/>
    <%= f.password_field :password %></p>

    <p><label for="password_confirmation"><span class='redcolor'>*</span>Confirm Password</label><br/>
    <%= f.password_field :password_confirmation %></p>

    <p><label for="company"><span class='redcolor'>*</span>Company</label><br/>
    <%= f.text_field :company %></p>

    <p><%= submit_tag 'Sign up' %></p>
    <% end -%>

解決

http://www.rubydoc.info/github/edavis10/redmine/ApplicationHelper:error_messages_forから次のコードを取得しました 。このコードは application_helper.rb に追加され、html.erb ファイルに対応する変更が <%= error_messages_for (@user) % として追加されます。 >

コード:

def error_messages_for(*objects)
  html = ""
  objects = objects.map {|o| o.is_a?(String) ? instance_variable_get("@#{o}") : o}.compact
  errors = objects.map {|o| o.errors.full_messages}.flatten
  if errors.any?
    html << "<div id='errorExplanation'><ul>\n"
    errors.each do |error|
      html << "<li>#{h error}</li>\n"
    end
    html << "</ul></div>\n"
  end
  html.html_safe
end
4

2 に答える 2

1

http://guides.rubyonrails.org/active_record_validations_callbacks.html

このガイドを読むと、フォームで使用できることがわかりますform.error_messages

于 2013-04-04T07:44:35.470 に答える
0

質問の解決策は質問の下に追加されます

于 2013-04-17T06:15:07.610 に答える