用户出生日期参数不保存

时间:2017-09-18 01:17:18

标签: ruby-on-rails devise

我有一个小型rails应用程序,但我无法获取一些我想要实现的用户保存信息。我的应用程序现在要求输入用户名和密码进行注册。我通过使用设计宝石做到了这一点。但是我想在应用程序中添加年龄检查,这就是我遇到问题的地方。

我的数据库列设置为(在我的架构中)

t.date "birth_date"

我的观点是

<%= f.input :birth_date, required: true, start_year:1900 %>

我的控制器有两个部分:

def create
  @user = current_user.build(user_params)
end

private

def user_params
  params.require(:user).permit(:birth_date)
end

每当我尝试登录并为我的新用户创建birth_date时,在我检查的控制台中,birth_date仍然设置为nil。谁会知道我对此缺少什么? (我想我已经开始使用Devise处理一些事情了)

3 个答案:

答案 0 :(得分:0)

假设您的UsersController与Devise控制器分开,您只需将其保存到db:

def create
  @user = current_user.update(user_params)
end

但您可能需要先将params(字符串)中的生日更改为日期对象,具体取决于您的列类型。

此外,您可以考虑将其移至#update,因为这实际上比#update#create行动。

答案 1 :(得分:0)

因为您在注册时使用了设计和附加字段,我认为您应该覆盖设计,here is link for reference,创建注册控制器如下

应用/控制器/ registrations_controller.rb

class RegistrationsController < Devise::RegistrationsController
  def create
    super do
        resource.birth_date = params[:birth_date]
        resource.save
    end
  end
end

确保你也有设计路线

应用/配置/ routes.rb中

devise_for :users, :controllers => {:registrations => "registrations"}

答案 2 :(得分:0)

假设您尝试将用户的输入birth_date作为sign_up过程的一部分并使用设计来实现此目的,您需要明确地将birth_date参数列入白名单。

最好的方法是使用您自己的registerations_controller并从设计继承

class Users::RegistrationsController < Devise::RegistrationsController

  before_action :configure_sign_up_params, only: :create
  before_action :configure_account_update_params, only: :update

  protected
    # If you have extra params to permit, append them to the sanitizer.
    def configure_sign_up_params
      devise_parameter_sanitizer.permit(:sign_up, keys: [:birth_date])
    end

    # If you have extra params to permit, append them to the sanitizer.
    def configure_account_update_params
      devise_parameter_sanitizer.permit(:account_update, keys: [:bith_date])
    end

end


#in routes.rb
devise_for :users, controllers: {registrations: "users/registrations"}