ActiveRecord不保存用户名和电子邮件值

时间:2015-09-07 15:59:13

标签: ruby-on-rails ruby-on-rails-4 rails-activerecord

我的db / schema.rb

ActiveRecord::Schema.define(version: 20150826120752) do

  create_table "microposts", force: :cascade do |t|
    t.text     "content"
    t.integer  "user_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

  create_table "users", force: :cascade do |t|
    t.string   "name"
    t.string   "email"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

end

我的用户迁移文件db / migrate / 20150826113925_create_users.rb

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :name
      t.string :email

      t.timestamps null: false
    end
  end
end

我的用户模型文件app / models / user.rb

class User < ActiveRecord::Base
  attr_accessor :name, :email

  has_many :microposts
  validates :name, presence: true
  validates :email, presence: true    

end
在rails console中

tom = User.new(name: "Tom", email: "tom@email.com")       
=> #<User:0x007f8a84ab1fb0 id: nil, name: nil, email: nil, created_at: nil, updated_at: nil>
tom.save

(0.1ms)  SAVEPOINT active_record_1
  SQL (0.1ms)  INSERT INTO "users" ("created_at", "updated_at") VALUES (?, ?)  [["created_at", "2015-09-07 15:55:20.944767"], ["updated_at", "2015-09-07 15:55:20.944767"]]
   (0.0ms)  RELEASE SAVEPOINT active_record_1
=> true
User.all
  User Load (0.1ms)  SELECT "users".* FROM "users"
=> [#<User:0x007f8a84691a98 id: 4, name: nil, email: nil, created_at: Mon, 07 Sep 2015 15:55:20 UTC +00:00, updated_at: Mon, 07 Sep 2015 15:55:20 UTC +00:00>]

为什么没有保存名称和电子邮件属性?

3 个答案:

答案 0 :(得分:3)

使用ActiveRecord时,除非您尝试创建虚拟属性,否则无需定义attr_accessor。 ActiveRecord根据数据库中的列为属性定义这些getter / setter。

当您在班级上设置attr_accessor时,您基本上会覆盖ActiveRecord为您提供的内容,因此不会使用它通常执行的功能,即将这些属性保存到数据库中。

从您的课程中删除attr_accessor应该可以解决您的问题。

答案 1 :(得分:1)

我会尝试删除attr_accessor :name, :email

答案 2 :(得分:-1)

如果删除此行attr_accessor :name, :email,它应该可以正常工作 使用rails 4你不需要这个。