Rails 4具有强参数的嵌套路由

时间:2014-02-21 14:15:46

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

我是Rails的新手,最近转向Rails 4强参数让我更加困惑。

我正在尝试设置帐户确认链接供人们点击。

我设置了以下路线:

rake routes
Prefix Verb   URI Pattern                                     Controller#Action
       GET    /users/:id/confirm/:confirmation_code(.:format) users#confirm

在我的UserController中,我有一个confirm操作,正在调用(我通过该操作中的简单重定向进行了测试),

以下是rails 4强参数:

private

def user_params
  params.require(:user).permit(:name, :email, :password,
                               :password_confirmation, :confirmation_code)
end

但是当我尝试访问/users/1/confirm/foobar

时,我收到以下错误
param not found: user

我可以看到为什么我收到了错误,但是我不确定如何通过删除require(:user)而不撤消强对数的安全性来解决它。如果我的基本方法是对的,我甚至都不是100%。

(我刚刚完成了Michael Hartl的rails教程,教程在用户控制器中有require(:user),我实际上并不确定删除它的安全隐患是什么)

2 个答案:

答案 0 :(得分:2)

我认为您无需致电user_params,因为该请求只是一个GET请求,因此params[:id]params[:confirmation_code]无关紧要。您可以直接使用这些参数,无论它们是否为强参数。

答案 1 :(得分:0)

您展示的路线发出GET请求,不会有params[:user],只有params[:id]params[:confirmation_code],这是路线所定义的。

如果您将使用params[:user]构建的表单发布回创建/更新操作,则会设置

form_for(@user)

问题是你在某个没有任何动作的动作中以某种方式调用方法user_params。该方法本身正在按预期完成其工作。