【问题标题】:strong parameters in rails 4.0 simple Devise implementationrails 4.0中的强参数简单设计实现
【发布时间】:2014-03-28 09:56:00
【问题描述】:

我已经阅读了文档,但仍然无法理解语法/格式。

我是 Rails 的新手。我的模型中有这个:

attr_accessible :email, :username

由于 rails 4.0 的变化,这需要转移到我的控制器上。

如果我把它放在我的控制器中会不会是正确的(这是我认为文档说要做的,但不确定我是否正确解释):

before_filter :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) << :username
  end 

对我来说这样的事情更有意义,我可以这样做吗?:

protected
  def permitted_paramters
    params.require(:username, :email).permit(:username, :email)
  end

如有任何建议,谢谢。

【问题讨论】:

  • Rails 4 中不需要attr_accessible ;)
  • @RichPeck 所以我应该完全关闭它而不在我的控制器中做任何事情?什么意思?
  • Rails 4 使用strong_params,这意味着您不再需要对attr_accessible 的任何引用!你应该从你的控制器中删除
  • 你确定吗,在文档中它说我们需要将 attr_accessible 移动到我们的控制器或等效的控制器(受保护的、允许的参数等)。我非常困惑......

标签: ruby-on-rails devise attributes ruby-on-rails-4.1


【解决方案1】:

虽然像在控制器中的其他任何地方一样执行params.require 会更有意义,但您不能在此处使用 Devise 执行此操作,因为:

  • Devise 需要知道您如何调用方法(此处为 permitted_parameters
  • 您不想为每个控制器过滤这些参数

这就是为什么您需要使用 Devise 的 devise_parameter_sanitizer 并确保仅在您使用 devise_controller? 时才应用它。


作为旁注,在您的第二个示例中:

params.require(:username, :email).permit(:username, :email)

require 方法不应采用属性列表,而是采用属性分组的名称。在不同的控制器上,它应该看起来像这样:

params.require(:user).permit(:username, :email)

这将允许以下参数:user[username]=Joe&amp;user[email]=joe@example.org

【讨论】:

  • 那么我对文档的解释是否正确,我的第一段代码会起作用还是必须在某处替换一些参数?该代码中的任何地方都没有说用户名或电子邮件,这就是为什么它对我来说不太直观。
  • 是的,您的第一段代码应该可以工作,但只有当您在注册时向用户询问比emailpassword 更多的信息时才需要它。如果用户需要输入username,那么你需要添加这个。
  • 还有一个密码确认字段,但那是密码的一部分,不应该要求这个正确吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-02
  • 2015-11-04
  • 1970-01-01
相关资源
最近更新 更多