我有一个小型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处理一些事情了)
答案 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"}