Ruby on rails 在rails控制台内创建用户并没有填充必要的属性

Ruby on rails 在rails控制台内创建用户并没有填充必要的属性,ruby-on-rails,ruby,ruby-on-rails-4,rails-console,Ruby On Rails,Ruby,Ruby On Rails 4,Rails Console,用户模型: class User < ActiveRecord::Base before_save { self.email == email.downcase } attr_accessor :name, :email validates :name, presence: true VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i validates :email, presence: true, format:

用户模型:

class User < ActiveRecord::Base
 before_save { self.email == email.downcase }
 attr_accessor :name, :email

 validates :name, presence: true
 VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
 validates :email, presence: true, format: { with: VALID_EMAIL_REGEX },
                        uniqueness: { case_sensitive: false}

 has_secure_password
 validates :password, length: { minimum: 6 }
end

但是当我用新属性测试一个新用户时,当使用create方法时,它仍然返回nil属性。但是,像这样更新属性(user.name=“adhsasd”)将创建一个用户。但是当我查询User.all时,属性又回到了nil,用户又是无效的……我是不是碰到了另一个数据库?我正在改变主意…

基本上,我认为您希望在模型中使用attr\u访问器,而不是attr\u访问器

“attr_accessor是ruby代码,当您的数据库中没有列,但仍希望在窗体中显示字段时使用。唯一允许此操作的方法是attr_accessor:fieldname,如果需要,您可以在视图或模型中使用此字段,但主要是在视图中


attr_accessible允许您列出所有您希望允许批量分配的列,正如andy在上面回避的那样。与此相反的是attr_protected,这意味着我不希望任何人被允许批量分配到该字段。更有可能的是,它将是您数据库中的一个字段,您不希望任何人胡乱摆弄它。比如status字段等。”

检查关于attr\u访问器使用的回答:为什么在保存前过滤器中使用==?分配新值不应该是单个=吗?谢谢!这有助于解决控制台错误,但当我在索引控制器中遍历User.all时,我仍然会得到带有name和email属性的未定义方法,但是如果我将该用户的索引控制器设置为“User.find(#id)”,这些属性显示得很好…User.all在控制器中给我带来了问题。你重新启动服务器了吗?
:001 > User.all
User Load (3.1ms)  SELECT "users".* FROM "users"
=> #<ActiveRecord::Relation []>

:002 > User.create(name: "Ryan Waits", email: "ryan.waits@gmail.com", password:
"foobar", password_confirmation: "foobar")
(0.1ms)  begin transaction
User Exists (0.2ms)  SELECT 1 AS one FROM "users" WHERE LOWER("users"."email") =
LOWER('ryan.waits@gmail.com') LIMIT 1
Binary data inserted for `string` type on column `password_digest`
SQL (6.8ms)  INSERT INTO "users" ("created_at", "password_digest", "updated_at") VALUES
(?, ?, ?)  [["created_at", Sat, 02 Nov 2013 16:20:10 UTC +00:00], ["password_digest",
"$2a$10$5MhI5u90tFqO3rrS58DW7eeNBdNCCveBA.IfqHp6OpwonYNaigyPO"], ["updated_at", Sat, 02
Nov 2013 16:20:10 UTC +00:00]]
(1.3ms)  commit transaction

=> #<User id: 3, name: nil, email: nil, created_at: "2013-11-02 16:20:10", updated_at:
"2013-11-02 16:20:10", password_digest:
"$2a$10$5MhI5u90tFqO3rrS58DW7eeNBdNCCveBA.IfqHp6Opwo..."> 
SELECT 1 AS one FROM "users" WHERE LOWER("users"."email") =
LOWER('ryan.waits@gmail.com') LIMIT