gpt4 book ai didi

ruby-on-rails - 用Devise添加额外的注册字段

转载 作者:行者123 更新时间:2023-12-03 13:04:05 24 4
gpt4 key购买 nike

我正在尝试向registrations#new添加一些额外的字段。由于我只想要额外的数据并且不需要其他功能,因此我不明白为什么需要覆盖 Controller 等。因此,我所做的就是按如下方式修改registrations#new:

%h2
Sign up
= form_for(resource, as: resource_name, url: registration_path(resource_name)) do ||f
= devise_error_messages!
%div
= f.label :email
%br
= f.email_field :email, autofocus: true
%div
= f.label :title_id
%br
= f.text_field :title_id
%div
= f.label :province_id
%br
= f.text_field :province_id
%div
= f.label :first_name
%br
= f.text_field :first_name
%div
= f.label :last_name
%br
= f.text_field :last_name
%div
= f.label :password
%br
= f.password_field :password
%div
= f.label :password_confirmation
%br
= f.password_field :password_confirmation
%div= f.submit 'Sign up'
= render 'devise/shared/links'

为了通过清理器启用这些额外的字段,我对ApplicationController进行了如下更新:
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
before_filter :store_requested_url!
# before_filter :authenticate_user!

def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:email) }
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:email, :password, :password_confirmation, :title_id, :province_id, :first_name, :last_name) }
devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:email, :password, :password_confirmation, :current_password) }
end

def after_sign_in_path_for(resource)
session[:requested_url] || root_path
end

private

def store_requested_url
# store last url as long as it isn't a /users path
session[:previous_url] = request.fullpath unless request.fullpath == /\/users/
end
end

由于某种原因,它不起作用,多余的字段作为空值进入数据库。

我正在使用带有Devise 3.0.0.rc的Ruby 2和Rails 4 rc1。

最佳答案

您的问题中的代码示例似乎无法正常工作,因为您没有设置before_filter来调用清理程序。

before_filter :configure_permitted_parameters, if: :devise_controller?

话虽如此,最好覆盖 Controller ,如接受的答案所示,以便应用程序 Controller 不会一直进行此检查。可以使用以下代码缩短可接受的答案。我已经使用我的应用程序测试了此代码,并且效果很好。所有这些都记录在3.0.0.rc标记中 README的Strong Parameters部分中。

覆盖 Controller :
class RegistrationsController < Devise::RegistrationsController
before_filter :configure_permitted_parameters, :only => [:create]

protected

def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :email, :password) }
end
end

然后更新路由以使用它:
devise_for :members, :controllers => { :registrations => "registrations" }

关于ruby-on-rails - 用Devise添加额外的注册字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16471498/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com