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