首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何为编辑操作指定devise_parameter_sanitizer?

如何为编辑操作指定devise_parameter_sanitizer?
EN

Stack Overflow用户
提问于 2013-11-05 14:39:07
回答 4查看 35.8K关注 0票数 57

我在Rails 4应用程序中添加了Devise,并成功地将用户名等添加到我的用户模型中。此外,我还可以使用延迟方式™来存储这些字段,即

代码语言:javascript
运行
复制
class ApplicationController < ActionController::Base
  before_filter :configure_permitted_parameters, if: :devise_controller?

  protected

    def configure_permitted_parameters
      devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:email, :password, :password_confirmation, :firstname, :middlename, :lastname) } 
    end
end

不过,我试过了

代码语言:javascript
运行
复制
def configure_permitted_parameters
  devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:email, :password, :password_confirmation, :firstname, :middlename, :lastname) }
  devise_parameter_sanitizer.for(:edit) { |u| u.permit(:email, :password, :password_confirmation, :firstname, :middlename, :lastname) }
end

但这并不像预期的那样起作用(编辑操作调用时没有存储用户名)。我还需要做点什么才能让它发挥作用吗?谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-11-05 16:05:16

再一次,这是阅读手册的问题.

神奇的单词是:account_update,因此工作版本变成

代码语言:javascript
运行
复制
def configure_permitted_parameters
  devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:email, :password, :password_confirmation, :firstname, :middlename, :lastname, :nickname) }
  devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:email, :password, :password_confirmation, :current_password, :firstname, :middlename, :lastname, :nickname) }
end

请注意,如果您正在使用非标准参数进行签名,您要查找的单词是:sign_in (正如所期望的)。

票数 92
EN

Stack Overflow用户

发布于 2016-06-12 22:54:51

用于设计4.1+

代码语言:javascript
运行
复制
class ApplicationController < ActionController::Base    
  before_action :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:first_name, :last_name, :email])
    devise_parameter_sanitizer.permit(:account_update, keys: [:first_name, :last_name, :phone, :email, bank_attributes: [:bank_name, :bank_account]])
  end
end

不推荐使用.for方法,现在我们使用.permit

第一个arg是动作名。:sign_up用于创建新的设计资源(如用户),:account_update用于编辑/更新资源。

第二个arg,:keys包含一个允许的参数数组。

如果您想要nested_attributes,在:account_update中有一个例子,您可以在其中放置一个单独的数组,键是<object>_attributes

票数 74
EN

Stack Overflow用户

发布于 2014-04-18 17:20:25

@conciliator关于:account_update这个神奇词是正确的,但是这里是他提到的http://rubydoc.info/github/plataformatec/devise/搜索'devise_parameter_sanitizer‘的文档链接,您将看到以下内容:

Devise中只有三个操作允许将任意一组参数传递给模型,因此需要清理。默认情况下,它们的名称和允许的参数是:

代码语言:javascript
运行
复制
sign_in (Devise::SessionsController#new) - Permits only the authentication keys (like email)
sign_up (Devise::RegistrationsController#create) - Permits authentication keys plus password and password_confirmation
account_update (Devise::RegistrationsController#update) - Permits authentication keys plus password, password_confirmation and current_password
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19791531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档