3

アプリで Facebook、Twitter、Linked サインインを使用するための簡単な登録フォームを生成しようとしています。しかし、以前のサインアップ手順でいくつかのフィールドを検証するユーザー モデルがあります。

外部サインインからの迅速な登録に同じデータベースを使用するために、Devise に基づいて登録コントローラーを拡張しようとしています。クレジットカード。

私はこのコントローラーを持っています:

class Users::QuickRegistrationController < Users::RegistrationsController

  self.model_class = Users::RegistrationsController

end

そして、私はこのユーザーモデルを持っています:

class User < ActiveRecord::Base  
  validates :name, :presence => true
  validates :first_surname, :presence => true
  validates :prefered_language, :presence => true
  validates :dni, :presence => true, :uniqueness => true #, :format => {:with => /(^\d{7,8}[a-zA-Z]$)|(^[a-zA-Z]\d{7}[a-zA-Z]$)/, :unless => "dni.blank?"}
  validates :phone_number, :presence => true, :format => { :with => /^((\d{9})|([+]\d{11}))$/, :unless => "phone_number.blank?"}, :uniqueness => true
  validates :birthdate, :presence => true, :age => {:adult => :over}
  validates :legal_conditions, :acceptance => {:accept => true}
  validates :email, :confirmation => true
  validates :email_confirmation, :presence => true
  validates :password_confirmation, :presence => true, :if => "new_record?"
  validates :country, :presence => true

Users::QuickRegistrationController の場合は validates :first_surname, :presence => false 、Users::RegistrationsController の場合は :first_surname, :presence => true のように言えますか?

さらに、Ruby でこの問題を解決するソリューションがあります。チュートリアルまたは関連リンクを提供できますか?

4

1 に答える 1

4

23tux が言うように、検証はモデルに基づいています。私がしたいことは、モデルに新しい列を追加することです:

add_column :products, :quick_registration, :boolean, default => true

次に、 User モデルで次のようにします。

class User < ActiveRecord::Base  
  validates :name, :presence => true
  validates :email, :confirmation => true
  validates :email_confirmation, :presence => true


  with_options :unless => :quick_registration? do |u|

    # These only validate during full registration
    u.validates :first_surname, :presence => true
    u.validates :prefered_language, :presence => true
    u.validates :dni, :presence => true, :uniqueness => true #, :format => {:with => /(^\d{7,8}[a-zA-Z]$)|(^[a-zA-Z]\d{7}[a-zA-Z]$)/, :unless => "dni.blank?"}
    u.validates :phone_number, :presence => true, :format => { :with => /^((\d{9})|([+]\d{11}))$/, :unless => "phone_number.blank?"}, :uniqueness => true
    u.validates :birthdate, :presence => true, :age => {:adult => :over}
    u.validates :legal_conditions, :acceptance => {:accept => true}
    u.validates :password_confirmation, :presence => true, :if => "new_record?"
    u.validates :country, :presence => true

  end
end

quick_registration次に、コントローラーでfalseに設定することで、追加の検証を「オン」にできます。

@user.quick_registration = false
@user.save   # all validations should fire
于 2012-10-23T21:54:13.670 に答える