【问题标题】:Rails: How to use Strong_Params on CERTAIN models onlyRails:如何仅在某些模型上使用 Strong_Params
【发布时间】:2013-07-22 19:10:12
【问题描述】:

我还没有切换到 Rails 4 并且一直在研究 strong_params。我喜欢我所看到的并且只想在 1 个模型上使用它。看起来很简单,但我想在我的 config > application.rb 文件中注释掉“config.active_record.whitelist_attributes = true”。

如何仅在某些模型中安全(安全)使用 strong_params?

【问题讨论】:

  • 当然,为什么不可能?
  • 你能解释一下吗?我想我必须做一些其他的事情,因为我正在评论 whitelist_attribute.. 我还是 ROR @phoet 的新手

标签: ruby-on-rails ruby-on-rails-4 strong-parameters


【解决方案1】:

我建议采用这种方法:默认情况下启用强参数,并专门为不需要它的控制器禁用它。 (是的,强大的参数现在在 Rails 4 的控制器中,不再在模型中)

要禁用特定控制器,您可以使用params.require(:model_name).permit!

这将允许该特定控制器的任何参数

例子

class UnsafeController

  ...

  def update
    ...
    @unsafe.update unsafe_params
    ...
  end

  private

    def unsafe_params
        params.require(:unsafe).permit!
    end

end

【讨论】:

  • 那么 config.active_record.whitelist_attributes = true @Benjamin
  • 正如我提到的“默认启用强参数”。这意味着您从 config/application.rb 文件和任何 mass_assignment_sanitizer 选项中删除了 whitelist_attributes 选项
  • 好的,对不起,如果我误解或遗漏了一些可能很明显的东西,但为了直截了当,“config.active_record.whitelist_attributes = true”只有在我没有的情况下才会起作用attr_accessible 在我的模型中。所以这就是你想要表达的观点,对吗? @本杰明
  • whitelist_attributes 默认情况下由 rails 设置为“false”,这就是您想要的。所以你需要从你的 application.rb 文件中删除它,这将自动启用强参数
  • Whitelist_attributes 是应用程序范围的 = 您不能在一个地方将其设置为 true,而在另一个地方设置为 false(除非您希望一次只有一个用户)。我给你的技术允许在任何地方使用强参数,并在你选择的控制器中禁用它(理解:允许任何参数)。如果您需要灵活的解决方案,那是唯一的方法。另请注意:强参数与控制器有关(如果您细粒度,则与操作有关),而不是模型..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 2011-07-15
  • 2016-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多