我正在使用嵌套的模型表单进行注册,并且正在作为初学者解决问题。特别突然出现的一个问题是,user.email
正以nil
的形式返回nil
。
在我开始使用嵌套模型表单之前,我可以在控制台中创建记录而不会出现问题。现在,我无法创建记录,并且创建的一些最新记录包含rails console
作为他们的电子邮件。 (我不确定它是否与嵌套模型有任何关系,但这是我开始使用时遇到的参考点。)
如果我进入user = User.new
user.email = ""
user.password = ""
user.profile = Profile.new
user.profile.first_name = ""
...
user.profile.save
user.save
创建新的用户/个人资料,我会按照以下流程进行操作:
NameError: undefined local variable or method 'params' for #<User:>
一切顺利,直到user.save,它给了我rails console
。在create_profile
中,它指向{。1}}
所以这是我的用户模型:
class User < ActiveRecord::Base
attr_accessor :password, :email
has_one :profile, :dependent => :destroy
accepts_nested_attributes_for :profile
validates :email, :uniqueness => true,
:length => { :within => 5..50 },
:format => { :with => /^[^@][\w.-]+@[\w.-]+[.][a-z]{2,4}$/i }
validates :password, :confirmation => true,
:length => { :within 4..20 },
:presence => true,
:if => :password_required?
before_save :encrypt_new_password
after_save :create_profile
def self.authenticate(email, password)
user = find_by_email(email)
return user if user && user.authenticated?(password)
end
def authenticated?(password)
self.hashed_password == encrypt(password
end
protected
def encrypt_new_password
return if password.blank?
self.hashed_password = encrypt(password)
end
def password_required?
hashed_password.blank? || password.present?
end
def encrypt(string)
Digest::SHA1.hexdigest(string)
end
end
任何人都可以帮我弄清楚发生了什么事吗?
更新:我尝试更改我的正则表达式,但我仍然看到电子邮件无效。虽然之前的SO帖子说不在没有测试的情况下盲目复制正则表达式,所以也许我只是没有正确测试它。好消息:我不再收到错误。
答案 0 :(得分:1)
attr_accessor
只是在对象上定义“属性”,与ActiveRecord模型的attributes
无关(attributes
是字段和值的Hash
从表中获得。)
ActiveRecord不保存attr_accessor
定义的此类“属性”。 (基本上,attr_accessor
同时定义了attr_reader
和attr _ writer
(即“getter”和“setter”)