未允许的参数:referenced_by

时间:2016-11-06 05:09:38

标签: ruby-on-rails forms cookies devise

我正在建立一个推荐系统,该系统使用此代码将网址的引荐部分存储在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

完全不知道发生了什么。

1 个答案:

答案 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级别。可能是错的,请在评论中告诉我。