我正在尝试生成一个快速注册表单,以便在我的应用上使用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
我可以说类似验证:first_surname,:presence =&gt;对于Users :: QuickRegistrationController而言为false,并且:first_surname,:presence =&gt;对于Users :: RegistrationsController是真的吗?
此外,有一个解决方案可以解决Ruby上的这个问题,你能提供任何教程或相关链接吗?
答案 0 :(得分:4)
正如23tux所说,验证基于该模型。我要做的是在模型中添加一个新列:
add_column :products, :quick_registration, :boolean, default => true
然后在您的用户模型中:
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