我是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 =开发)而不是在视图中获得有效数据?
答案 0 :(得分:3)
问题似乎是你为名称和电子邮件创建了attr_accessor
,它覆盖了ActiveRecord提供的setter和getter方法来设置和获取数据库值。从代码中删除此行,它应该再次起作用:
attr_accessor :name, :email
当您使用attr_accessor提供的stters和getter时,您可以设置并返回值,但它们不会保存到数据库中,因此当您过度使用该对象或从数据库重新加载它时它们会丢失。