我的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>]
为什么没有保存名称和电子邮件属性?
答案 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你不需要这个。