设计用户模型自定义字段始终为零

时间:2014-04-15 13:19:51

标签: ruby-on-rails-4 devise

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

  • COMPANY_NAME
  • PHONE_NUMBER
  • 名称

使用以下代码在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 =&GT; &#34; example@example.com"

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

u.company_name =&GT;的

任何人都有这方面的线索吗?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

我发现了这个问题。我在用户模型中添加了以下行覆盖company_name,phone_number方法只需删除这些行使其工作。

attr_accessor :company_name, :country_code, :phone_number

def company_name
end

def phone_number
end

def country_code
end