Rails 4 设计非惰性函数重载
Rails 4 Devise Non-Lazy Function Overloading
我有两个设计模型——工人和用户。工作人员注册需要不特定于用户的其他属性。
我是 运行 我的用户通过应用程序控制器注册
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :password, :email, :firstName, :lastName, :dateofBirth, :address1, :address2, :city, :state, :zip)}
end
然而,当我添加我的工人注册时,我决定采用非懒惰的方式,通过
创建我的工人控制器
rails generate devise:controllers Worker
然后进入worker中的注册控制器。在搜索 Google 和 StackOflow 以弄清楚如何执行此操作后,我取消了前过滤器的哈希处理并添加了一个参数过滤器。还进入 Github 设计源代码并将其创建代码复制并粘贴到其注册控制器中。我的控制器看起来像这样:
class Workers::RegistrationsController < Devise::RegistrationsController
before_filter :configure_sign_up_params, only: [:create]
def create
build_resource(registration_params)
resource.save
yield resource if block_given?
if resource.persisted?
if resource.active_for_authentication?
set_flash_message :notice, :signed_up if is_flashing_format?
sign_up(resource_name, resource)
respond_with resource, location: after_sign_up_path_for(resource)
else
set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_flashing_format?
expire_data_after_sign_in!
respond_with resource, location: after_inactive_sign_up_path_for(resource)
end
else
clean_up_passwords resource
set_minimum_password_length
respond_with resource
end
#super
end
protected
def registration_params
params.require(:worker).permit(:username, :password, :email, :firstname, :lastname, :address1, :address2, :city, :state, :zip)
end
# If you have extra params to permit, append them to the sanitizer.
def configure_sign_up_params
devise_parameter_sanitizer.for(:sign_up) {|u| u.permit(:username, :password, :email, :firstname, :lastname, :address1, :address2, :city, :state, :zip)}
end
end
end
数据在我的控制台上仍然显示为 nil。为什么数据没有保存,我如何获取要保存的数据?
对于任何发现并能够理解这一点的人来说都可以 - 答案是 STI。
http://adamrobbie.me/blog/2013-3-29-sti-with-rails-40-beta-and-devise
我有两个设计模型——工人和用户。工作人员注册需要不特定于用户的其他属性。
我是 运行 我的用户通过应用程序控制器注册
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :password, :email, :firstName, :lastName, :dateofBirth, :address1, :address2, :city, :state, :zip)}
end
然而,当我添加我的工人注册时,我决定采用非懒惰的方式,通过
创建我的工人控制器 rails generate devise:controllers Worker
然后进入worker中的注册控制器。在搜索 Google 和 StackOflow 以弄清楚如何执行此操作后,我取消了前过滤器的哈希处理并添加了一个参数过滤器。还进入 Github 设计源代码并将其创建代码复制并粘贴到其注册控制器中。我的控制器看起来像这样:
class Workers::RegistrationsController < Devise::RegistrationsController
before_filter :configure_sign_up_params, only: [:create]
def create
build_resource(registration_params)
resource.save
yield resource if block_given?
if resource.persisted?
if resource.active_for_authentication?
set_flash_message :notice, :signed_up if is_flashing_format?
sign_up(resource_name, resource)
respond_with resource, location: after_sign_up_path_for(resource)
else
set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_flashing_format?
expire_data_after_sign_in!
respond_with resource, location: after_inactive_sign_up_path_for(resource)
end
else
clean_up_passwords resource
set_minimum_password_length
respond_with resource
end
#super
end
protected
def registration_params
params.require(:worker).permit(:username, :password, :email, :firstname, :lastname, :address1, :address2, :city, :state, :zip)
end
# If you have extra params to permit, append them to the sanitizer.
def configure_sign_up_params
devise_parameter_sanitizer.for(:sign_up) {|u| u.permit(:username, :password, :email, :firstname, :lastname, :address1, :address2, :city, :state, :zip)}
end
end
end
数据在我的控制台上仍然显示为 nil。为什么数据没有保存,我如何获取要保存的数据?
对于任何发现并能够理解这一点的人来说都可以 - 答案是 STI。
http://adamrobbie.me/blog/2013-3-29-sti-with-rails-40-beta-and-devise