我正在建立一个推荐系统,该系统使用此代码将网址的引荐部分存储在Cookie中。
before_filter :capture_referral
private
def capture_referral
session[:ref] = params[:ref] if params[:ref]
end
然后我在我的Devise User Register html.erb中调用session[:ref]
,就像<%= f.hidden_field :referred_by, value: session[:ref]%>
一样,我知道cookie正在运行,因为params的输出是:
Aunticity_token"=>"CmYKwW8LxRAIz1eLp6tQcwJefvnEMU1xV3aby0/pWKGqyd4WitO8oTcDu0u+51HcGB7eyyXZzn2jbEg+D48d4A==",
"user"=>{
"email"=>"jexuc@gmail.com",
"password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]",
"referred_by"=>"jayhaz"},
"commit"=>"Sign up"}`
但是,在输出中有一个Unpermitted parameter: referred_by
可以阻止将refer_by代码保存到用户的数据库条目中。
我也尝试过以下内容但它仍然无效,是的,它在我的routes.rb
文件中声明:
class User::RegistrationsController < Devise::RegistrationsController
before_filter :configure_permitted_parameters
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys:[:referred_by])
# devise_parameter_sanitizer.permit(:account_update, keys:[:first_name, :last_user])
end
end
完全不知道发生了什么。
答案 0 :(得分:0)
修正了问题,我不得不放
before_filter :configure_permitted_parameters, if: :devise_controller?
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:email,:password,:password_confirmation,:referred_by])
# devise_parameter_sanitizer.permit(:account_update, keys:[:first_name, :last_user])
end
在我的application_controller.rb
而不是我的User::RegistrationsController < Devise::RegistrationsController
。我不完全确定它为什么会起作用,但我认为这可能与application_controller
贯穿整个应用程序有关,而不仅仅是Devise::RegistrationsController
级别。可能是错的,请在评论中告诉我。