Rails 4强参数

时间:2013-08-06 03:07:23

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

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行,而不是只有1行。但是,那里没有什么新东西,它只是一个手动创建的允许参数列表,事实上,它只是一个哈希,不是吗?或者它有更深层次的目的吗?

3 个答案:

答案 0 :(得分:12)

我认为在将rails 4作为单独的gem发布之前,它存在方式(之前的方式) https://github.com/rails/strong_parameters

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

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

当然,没有什么新东西, 您可以通过编写自己的过滤器来手动执行此过滤,并且如果哈希中的深层嵌套哈希和数组是动态创建的(未修复),则可能会有些棘手的问题

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

答案 1 :(得分:6)

来自the official blog

  

我们正在探索一种处理Rails中的群发分配保护的新方法。或者实际上,它并不是一种真正的新方式,更多的是在你忘记的时候用一些醋混合来提取既定的做法。

     

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

     

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

要在Rails 3中使用它,您可以使用strong parameters gem并按照其中的说明操作。

答案 2 :(得分:3)

  
    

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

  

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

  
    

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

  

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

  
    

或者还有更深层次的目的吗?

  

我认为你所处的地方是我们必须编写更多代码才能做同样的事情。如果您正在做一些基本的工作,这似乎就是这样,但是一旦您开始定制授权并使事情变得更加动态,事情就会变得棘手。

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

有意义吗?