Rails设计 – 使用关联模型注册用户

我在这个主题上遇到了一些SO问题,但所有这些问题似乎已经过时或者只是编码错误。

问题:我正在注册用户,作为结帐流程的一部分。 我想在用户注册时收集用户的地址。 我有一个用户模型和一个地址模型。 我似乎无法弄清楚如何正确覆盖Devise的注册控制器以允许额外的参数。

这是我开始的:

class User  :destroy accepts_nested_attributes_for :addresses end 

我也有我的地址模型:

 class Address < ActiveRecord::Base belongs_to :state belongs_to :user end 

…在routes.rb中:

  devise_for :users, controllers: {registrations: 'registrations'} 

最后,我尝试覆盖设计注册的控制器:

 class RegistrationsController  [:address, :address2, :city, :state_id, :zip_code]) } end end 

在您的application_controller.rb中

 class ApplicationController < ActionController::Base before_action :configure_strong_params, if: :devise_controller? def configure_strong_params devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :name, :addresses_attributes => [:address, :address2, :city, :state_id, :zip_code]) } end end 

现在在您的注册表单中,您可以使用address_attributes&devise注册参数将接受此操作。

现在要暂停filter链的救援,请在registrations_controller.rb文件中尝试此操作

 class RegistrationsController < Devise::RegistrationsController skip_before_filter :require_no_authentication, only: :create #other codes end