数据库记录总是返回'nil'

时间:2013-07-29 10:33:11

标签: ruby-on-rails database model console

我是Rails(Rails 4.0.0)的新手,在创建数据库记录(sqlite3)时遇到了问题。  它总是返回'nil'。

用户模型(验证)

attr_accessor :name, :email

validates :name, presence: { message: 'name field can not be blank'},
                   length: { maximum: 30 }

validates :email, presence: { message: 'email can not be blank'},
                    format: { with: /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i },
                uniqueness: { case_sensitive: false, message: 'User already exist'}

Rails控制台(开发环境)

  

> user = User.create!(名称:“user”,email:“user@gmail.com”)
      =>< #User id:4,name: nil ,电子邮件: nil ,created_at:“2013-07-29 09:27:22”,updated_at: “2013-07-29 09:27:22”>

当我询问用户的姓名和电子邮件时,我会收到有效数据,而不是nil。

> user.name
=> "user" 
> user.email
=> "user@gmail.com" 

然后我在视图中再次获得 nil

 <%= @user.name %>
 <%= @user.email %>

我知道为什么我在控制台(env =开发)而不是在视图中获得有效数据?

1 个答案:

答案 0 :(得分:3)

问题似乎是你为名称和电子邮件创建了attr_accessor,它覆盖了ActiveRecord提供的setter和getter方法来设置和获取数据库值。从代码中删除此行,它应该再次起作用:

attr_accessor :name, :email

当您使用attr_accessor提供的stters和getter时,您可以设置并返回值,但它们不会保存到数据库中,因此当您过度使用该对象或从数据库重新加载它时它们会丢失。