我在这个主题上遇到了一些SO问题,但似乎只有out of date或者只是编码不好。
问题:我正在注册用户,作为结帐流程的一部分。我想在他们注册时收集用户的地址。我有一个用户模型和一个地址模型。我似乎无法弄清楚如何正确地覆盖Devise的注册控制器以允许额外的参数。
以下是我的开始:
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :orders
has_many :addresses, :dependent => :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 < Devise::RegistrationsController
before_filter :configure_permitted_parameters
# GET /users/sign_up
def new
# Override Devise default behaviour and create a profile as well
build_resource({})
resource.build_address
respond_with self.resource
end
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) { |u|
u.permit(:email, :password, :password_confirmation, :address_attributes => [:address, :address2, :city, :state_id, :zip_code])
}
end
end
答案 0 :(得分:2)
在你的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&amp;设计注册参数将接受此。
现在要暂停过滤器链中的救援,请在registrations_controller.rb
文件中尝试此操作
class RegistrationsController < Devise::RegistrationsController
skip_before_filter :require_no_authentication, only: :create
#other codes
end