rails 4.0中的强参数简单设计实现

时间:2014-03-28 09:56:01

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

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

我在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

任何建议表示赞赏,谢谢。

1 个答案:

答案 0 :(得分:0)

虽然像控制器中的其他地方一样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&user[email]=joe@example.org