3

我是一个相对新手,所以非常感谢任何帮助。

我正在使用带有 Clearance gem 的 Rails 4.2 进行身份验证。我希望有人可以描述覆盖控制器以在注册表单中包含自定义属性的最佳实践。

我已经阅读了很多不同的建议,其中许多来自以前版本的不使用 strong_parameters 的 rails。

如果有人可以简要介绍我需要覆盖的方法(user_params/user_from_params/etc),我将不胜感激。我可以通过定义一个仅包含@user = User.new 的新“新”方法和使用 .permit 的新“user_params”方法来使事情正常运行,但我担心我在 user_from_params 中绕过的默认代码.

任何关于最佳实践的建议都会很棒!

谢谢

4

2 回答 2

6

首先,扩展Clearance::UsersController和覆盖#user_params以允许新属性:

# app/controllers/users_controller.rb
class UsersController < Clearance::UsersController

  private

  def user_params
    params[:user].permit(:email, :password, :your_custom_attribute)
  end
end

然后,更新您的路由文件以使用您的新控制器:

# config/routes.rb
resources :users, controller: :users, only: :create
于 2015-05-14T03:37:55.833 回答
0

当我有时间更新 Clearance 文档时,我正在工作,但现在最简单的事情是检查Clearance 用户控制器以查看可以覆盖的各种方法。

现在的默认实现user_from_params有点奇怪,因为 Clearance 1.x 仍然支持 Rails 3.x,所以它是在我们使用attr_accessible而不是强参数的时候编写的。

我可能会做类似的事情:

def user_params
  # Use strong params to do what you need
end

def user_from_params
  User.new(user_params)
end

您可能需要稍微按摩user_params一下,以便您在那里所做的任何事情仍然对new动作有效,就像user_from_params在那里仍然使用的那样。我在 Clearance中打开了一个问题,看看我们是否可以在 2.0 之前改进这方面。

于 2015-03-19T13:34:53.697 回答