Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails ActiveRecord不保存用户名和电子邮件值_Ruby On Rails_Ruby On Rails 4_Rails Activerecord - Fatal编程技术网

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

Ruby on rails ActiveRecord不保存用户名和电子邮件值,ruby-on-rails,ruby-on-rails-4,rails-activerecord,Ruby On Rails,Ruby On Rails 4,Rails Activerecord,My 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:

My 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控制台中:

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>]
为什么不保存名称和电子邮件属性

如果您删除此行attr\u accessor:name,:email,我会尝试删除attr\u accessor:name,:email,它应该可以工作 有了rails 4,您就不需要这个了。

有了ActiveRecord,就不需要定义attr\u访问器,除非您试图创建虚拟属性。ActiveRecord根据数据库中的列为属性定义这些getter/setter

在类上设置attr_accessor时,您基本上覆盖了ActiveRecord为您提供的内容,因此没有使用它通常使用的功能,即将这些属性保存到数据库中


从类中删除attr_访问器应该可以解决您的问题

如果您选择了tom=User.createname:tom,电子邮件:tom@email.com是否会发生同样的情况?我会尝试删除attr_访问器:name,:email@laertiades-请将其作为答案发布。解释原因:此行覆盖默认的活动记录设置器和获取器。这些是在匿名模块中定义的,当rails建立连接并检查表时,匿名模块被创建并包含在类中。attr_accessor直接在类中定义了一个方法,并且在方法查找期间它优先于包含的方法。我确实理解您想要获得点和全部,但这不是最好的方法。你只是简单地复制了几分钟前提供的答案——这对任何人都没有帮助,也不能扩展社区知识,而且是一种获取免费积分的丑陋方式。如果你有更多的分数,你将能够看到删除的答案,你会注意到一些人删除了他们的正确答案,仅仅因为他们在几秒钟后发布了一个几乎相同的答案。我不确定你是否理解。我把我的答案放在拉尔蒂兹的答案前2分钟。我想他排在我之前只是因为有人投票给他而不是我?也许我错了。对不起,我的英语很差。你在他的回答后2分3秒就回答了。你可以通过将鼠标悬停在回答的xxx上,获得答案发布的准确时间。除非出于某种原因16:19比16:17早2分钟?你说得对。当我开始写我的答案时,我认为他的答案并没有公布。不管怎样,我认为标准书呆子有他的解决方案-