rails 4和thoughtbot / clearance - 向用户模型添加字段

时间:2015-03-19 02:34:10

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

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

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

我已经阅读了大量有关各种建议的建议,其中许多建议来自以前版本的不使用strong_parameters的rails。

如果有人能提供我需要覆盖的方法的简要分类(user_params / user_from_params / etc),我将非常感激。我可以通过定义一个新的'new'方法来实现功能,该方法只包含@ user = User.new,以及一个使用.permit的新'user_params'方法,但是我担心我在user_from_params中绕过的默认代码。

这里有关于最佳实践的任何建议都太棒了!

由于

2 个答案:

答案 0 :(得分:5)

首先,扩展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

答案 1 :(得分:0)

当我有时间更新Clearance的文档时,我正在工作,但现在最简单的方法是检查Clearance users controller以查看可以覆盖的各种方法。

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仍然在那里使用。我打开了issue in Clearance,看看我们是否可以在2.0之前改进这方面。