3

Rails 4 如何处理强参数似乎很有趣:

def UsersController < ActionController::Base
  def update
    @user = current_user

    if @user.update_attributes(user_profile_parameters)
      redirect_to home_path, notice:  "Your profile has been successfully updated."
    else
      render action: "edit"
    end
  end

  private
  def user_profile_parameters
    params.require(:user).permit(:name, :password, :password_confirmation, :email)
  end
end

我想知道,在 Rails 3 中不可能吗?是的,也许不是只有 1 行,而是需要 3 行。但是,那里并没有什么新东西,它只是一个手动创建的允许参数列表,实际上,它只是一个哈希,不是吗?还是有更深层的目的?

4

3 回答 3

12

我猜它在 rails 4 作为单独的 gem https://github.com/rails/strong_parameters发布之前就已经存在了(以前的方式)

rails 4 默认有它,如果你想将它与 rails 3 一起使用,只需在你的 gemfile 中获取 gem 并开始:)。

在 gem 的 github 链接上,他们还写了关于如何使用它的很棒的文档,所以我想你使用它应该没有任何问题。

当然,其中没有什么新东西,您可以通过编写自己的过滤器来手动执行此过滤,并且如果哈希的键是动态创建的(不固定),深度嵌套的哈希和数组可能会变得有点棘手

“”是的,不是只有 1 行,而是需要 3 行“”这就是大多数宝石所做的,我们使用它们而不是重新发明轮子,只专注于我们的业务逻辑。

于 2013-08-06T03:24:32.657 回答
6

来自官方博客

我们正在探索一种在 Rails 中处理批量赋值保护的新方法。或者实际上,这并不是一种真正的新方法,它更像是在您忘记时加入一些醋混合的既定做法的提取。

这种新方法是对切片模式的提取,我们将其称为 strong_parameters 的插件(也已作为 gem 提供)。基本思想是将质量分配保护移出模型并移入它所属的控制器中。

控制器的重点是控制用户和应用程序之间的流程,包括身份验证、授权以及作为访问控制的一部分。我们永远不应该在模型中加入质量分配保护,而且很多人很久以前就停止这样做了,而是转向了切片模式或其中的一种变体。是时候提取这种模式并将其带给人们了。

要在 Rails 3 中使用它,您可以使用强参数 gem并按照那里的说明进行操作。

于 2013-08-06T06:17:07.537 回答
3

我想知道,在 Rails 3 中不可能吗?

是的,您可以使用这个 gem在 rails 3 中使用强参数。

这只是一个哈希,不是吗?

是的,参数只是一个哈希。

还是有更深层的目的?

我认为你的意思是我们必须编写更多的代码来做同样的事情。如果您正在做一些基本的工作,看起来可能是这样,但是一旦您开始自定义授权并使事情变得更加动态,事情就会变得棘手。

一个问题是它attr_accessible不是很灵活。强大的参数解决了这个问题。我相信强大的参数是一种让您更有意识并让您更好地控制数据的方法。一种为您提供有关创建记录的数据的文档的方法。

说得通?

于 2013-08-09T20:35:28.587 回答