【问题标题】:Custom user fields in Devise 3 under Rails 4Rails 4 下的 Devise 3 中的自定义用户字段
【发布时间】:2013-05-31 07:50:08
【问题描述】:

我正在使用 Devise 3 的候选发布版本,以便可以将其与 Rails 4 一起使用。在 Rails 3.2 中,我曾经能够通过简单地将自定义字段添加到我的 User 模型来注册该字段/edit.html.erb 和 registration/new.html.erb 文件(在运行正确的迁移之后)。然后我只需将该字段添加到模型中的attr_accessible 字段列表中。

但是,在 Rails 4 中,没有 attr_accessible 列表,我不能简单地在视图中添加字段。如何添加自定义用户字段?

【问题讨论】:

    标签: ruby-on-rails devise ruby-on-rails-4 attr-accessible strong-parameters


    【解决方案1】:

    添加

         def configure_permitted_parameters
             devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:username, :email) }
             devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :email, :password, :password_confirmation) }
             devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:username, :email, :password, :password_confirmation, :current_password) }
         end
    

    应用程序控制器为我工作。

    【讨论】:

    • 您可能还需要:before_action :configure_permitted_parameters, if: :devise_controller?
    【解决方案2】:

    我被告知要查看主要的README on the github page and there it was。很简单。

    class ApplicationController < ActionController::Base
      before_filter :configure_permitted_parameters, if: :devise_controller?
    
      protected
    
      def configure_permitted_parameters
        devise_parameter_sanitizer.for(:sign_up) << :username
      end
    end
    

    【讨论】:

      【解决方案3】:

      如果你想允许额外的参数,你可以在你的

      中使用一个简单的前置过滤器

      应用控制器:

      class ApplicationController < ActionController::Base
        before_filter :configure_permitted_parameters, if: :devise_controller?
      
        protected
      
        def configure_permitted_parameters
          devise_parameter_sanitizer.for(:sign_up) << :username
        end
      end
      

      【讨论】:

        【解决方案4】:

        您需要为设计启用强参数而不是 attr_accessible 这样做您需要创建新的初始化程序,例如:

        DeviseController.class_eval do
          def resource_params
            unless params[resource_name].blank?
              params.require(resource_name).permit(:email, :password, :password_confirmation, :remember_me)
            end
          end
        end
        

        确保您从 rails4 分支(plataformatec/devise)克隆了 gem。 从模型中移除 attr_accesible

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-18
        • 1970-01-01
        相关资源
        最近更新 更多