【问题标题】:devise User model custom field always nil设计用户模型自定义字段始终为零
【发布时间】:2014-04-15 13:19:51
【问题描述】:

我在我的 rails 4 项目中使用设计,我的用户模型中有 3 个自定义字段,

  • 公司名称
  • 电话号码
  • 姓名

当我使用以下代码在 rails 控制台创建新用户时

u = User.new(email:'example@example.com', company_name: "xxxxxx", phone_number: "12345678", name: "Test Name", password: 'asdfadsf')

然后打印出这个实例,它显示正确

#<User id: nil, email: "example@example.com", encrypted_password: "$2a$10$xf9N0xw9zrGBDngD48IdRO9AEUkAJH1/XjOy0dFZTd0L...", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil, created_at: nil, updated_at: nil, organization_id: nil, username: nil, admin: nil, profile_img: nil, tagline: nil, name: "Test Name", status: 1, country_code: nil, phone_number: "12345678", company_name: "xxxxxx">

然后我访问内置字段的设计,它正确显示了值

u.email => "example@example.com"

但是当我尝试访问自定义字段(例如 company_name)时,它却显示为 nil

u.company_name =>

有人知道这件事吗?

【问题讨论】:

    标签: ruby-on-rails-4 devise


    【解决方案1】:

    您应该通过强参数允许这些自定义属性。

    devise wiki 有一些有用的例子,例如:

    class ApplicationController < ActionController::Base
      before_action :configure_permitted_parameters, if: :devise_controller?
    
      protected
    
      def configure_permitted_parameters
        devise_parameter_sanitizer.for(:sign_up) << [:name, :company_name, :phone_number]
      end
    end
    

    或者你可以使用这个:

    def configure_permitted_parameters
      devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:email, :name, :company_name, :phone_number, :password, :password_confirmation) }
    end
    

    或者如果您不想要任何限制:

    def configure_permitted_parameters
      devise_parameter_sanitizer.for(:sign_up) { |u| u.permit! }
    end
    

    【讨论】:

    • 感谢您的回答。但我已经在我的应用控制器中添加了允许的参数功能。问题是我覆盖了 getter 函数,这导致了这个问题。
    【解决方案2】:

    我发现了问题。我已经在覆盖 company_name、phone_number 方法的用户模型中添加了以下行,只需删除这些行即可。

    attr_accessor :company_name, :country_code, :phone_number
    
    def company_name
    end
    
    def phone_number
    end
    
    def country_code
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-22
      • 1970-01-01
      • 2014-09-19
      • 1970-01-01
      • 2020-06-04
      • 1970-01-01
      相关资源
      最近更新 更多