1

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

用户模型(验证)

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 = development)中而不是在视图中获得有效数据吗?

4

1 回答 1

3

问题似乎是您attr_accessor为 name 和 email 创建了覆盖 ActiveRecord 提供的 setter 和 getter 方法来设置和获取数据库值。从您的代码中删除这一行,它应该再次工作:

attr_accessor :name, :email

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

于 2013-07-29T10:43:03.977 回答