首页 文章

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

提问于
浏览
1

我是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!(name:“user”,email:“user@gmail.com”)=> <#User id:4,name:nil,email:nil,created_at:“2013-07-29 09:27:22“,updated_at:”2013-07-29 09:27:22“>

当我询问用户的姓名和电子邮件时,我得到的是有效数据,而不是零 .

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

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

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

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

1 回答

  • 3

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

    attr_accessor :name, :email
    

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

相关问题