我在Rails3.2 devise_invitable(1.1.8),设计(3.1.1)没有强参数,当我尝试注册用户时,我得到了跟踪日志。我正在使用此路由来自定义设计邀请控制器:
devise_for :users, path_names: {sign_in: "login", sign_out: "logout"}, :controllers => { :invitations => 'team_invitations' }
但是为什么注册请求发送到DeviseInvitable :: RegistrationsController而不是设计注册控制器
Started POST "/users" for 127.0.0.1 at 2013-10-02 21:27:50 +1300
Processing by DeviseInvitable::RegistrationsController#create as HTML
Parameters: {"utf8"=>"✓","authenticity_token"=>"thlkjyVYHhFY3erB+9yI7uwotIU7GozswOdjz9w7DNA=",
"user"=>{"username"=>"", "email"=>"boopage@gmail.com", "password"=>"[FILTERED]"}, "commit"=>"Sign up"}
Unpermitted parameters: username, email, password
由于
答案 0 :(得分:2)
这已经过时了,我更确定上面提供的解决方案都没有工作(因为,我遇到了同样的问题)。
将控制器扩展为invitable,并向其添加以下代码行:
#app/controllers/invitations_controllers.rb
class InvitationsController < Devise::InvitationsController
def edit
super
end
private
def update_resource_params
params.require(:user).permit(:email, :password, :password_confirmation, :your_params, :invitation_token)
end
要扩展控制器,您需要创建以下内容:
#app/routes.rb
devise_for :users, :controllers => { invitations: 'invitations' }
瞧!
答案 1 :(得分:1)
您需要在应用程序控制器中编辑强参数:这将有助于https://github.com/scambra/devise_invitable#strong-parameters
devise_parameter_sanitizer.for(:invite) do |u|
u.permit(username, :email, :password, :password_confirmation,
:invitation_token)
end
答案 2 :(得分:0)
在controllers / application_controller.rb中添加:
before_filter :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_in) << :username
devise_parameter_sanitizer.for(:sign_in) << :email
devise_parameter_sanitizer.for(:sign_in) << :password
end
答案 3 :(得分:0)
有同样的问题,以上解决方案对我不起作用。所以我对设计模块(源https://github.com/scambra/devise_invitable/blob/a50e37bc43509f7be02be8bca2b072b55e66eeaf/lib/devise_invitable/parameter_sanitizer.rb)进行了一些小修补:
module DeviseInvitable module ParameterSanitizer CUSTOM_FIELDS = [:field1, :field2] private if defined?(Devise::BaseSanitizer) def permit(keys) default_params.permit(*Array(keys)) end def attributes_for_with_invitable(kind) case kind when :invite resource_class.respond_to?(:invite_key_fields) ? resource_class.invite_key_fields.concat(CUSTOM_FIELDS) : [] when :accept_invitation [:password, :password_confirmation, :invitation_token] else attributes_for_without_invitable(kind) end end else def initialize_with_invitable(resource_class, resource_name, params) initialize_without_invitable(resource_class, resource_name, params) permit(:invite, keys: (resource_class.respond_to?(:invite_key_fields) ? resource_class.invite_key_fields.concat(CUSTOM_FIELDS) : []) ) permit(:accept_invitation, keys: [:password, :password_confirmation, :invitation_token] ) end end end end
只需将其放置到初始化程序即可。