我正在使用我的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 =&GT; &#34; example@example.com"
但是当我尝试访问自定义字段时,例如company_name,它显示为nil而不是
u.company_name =&GT;的零
任何人都有这方面的线索吗?
答案 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