设计宝石注册模型问题

时间:2017-12-02 18:06:29

标签: ruby-on-rails ruby ruby-on-rails-3 devise

我对我的用户进行了年龄检查,如果他们想要注册我的应用,则必须达到一定的年龄。我正在使用设计宝石,但在我的用户模型中创建了一个方法来检查年龄....我得到一个错误,说明无论我想做什么,他们都可以由于零级别而无法完成。基本上我有一个用户,但用户的birth_date没有保存。

这告诉我,我把这个逻辑放在错误的地方。但是,我不知道在哪里。我有一个注册控制器和一个用户控制器。我也有用户模型。我没有注册模型,我想知道我的方法是否需要采用我不具备的不同模型?或者,如果我错误地构建它。

我的用户模型

class User < ActiveRecord::Base
  before_create :age_restriction

  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  def age_restriction
    if (self.birth_date&.to_date + 18.years) < Date.today # assuming dob format is mm/dd/yy
      errors.add :birth_date, 'must be older than 18'
    end
  end
end

我的注册模式

Cass RegistrationsController < Devise::RegistrationsController
  before_action :configure_sign_up_params, only: :create
  before_action :configure_account_update_params, only: :update

  protected

  def configure_sign_up_params
    devise_parameter_sanitizer.permit(:sign_up, keys: [:bith_date, :first_name, :last_name])
    binding.pry
  end

  def configure_account_update_params
    devise_parameter_sanitizer.permit(:account_update, keys: [:birth_date, :first_name, :last_name])
  end
end

我输入的断点,当我输入devise_parameter_sanitizer时,我得到了

 @permitted=
  {:sign_in=>[:email, :password, :remember_me],
   :sign_up=>
    [:email, :password, :password_confirmation, :bith_date, :first_name, :last_name],
   :account_update=>[:email, :password, :password_confirmation, :current_password]},
 @resource_name=:user>

1 个答案:

答案 0 :(得分:0)

错字。目前,:bith_date。将其修复为birth_date,模型应该能够读取正确的属性。

这是零,因为您正在检查self.birth_date,而您允许的参数是:bith_date

在sign_up_params中允许:birth_date