用户模型:
class User < ActiveRecord::Base
attr_accessor :name, :email
has_secure_password
validates :password, presence: true, length: { minimum: 6 }
end
问题是,在Rails控制台中, 名称,电子邮件,密码,密码_确认 属性不会显示。
我怀疑前两个是由于设置attr_accessor :name, :email
导致的,后两个是由于has_secure_password
但是,当我单独调用这些属性时,它们会出现:
Loading development environment (Rails 4.2.0)
2.2.1 :001 > u = User.new(name: "asd", email: "aedede@aece.com", password: "qweasd", password_confirmation: "qweasd")
=> #<User id: nil, name: nil, email: nil, created_at: nil, updated_at: nil, password_digest: "$2a$10$a98/zxfH0zaT0Hh.xalVPOxwbJiXAkH17BiRg.sV4hw...">
2.2.1 :002 > u
=> #<User id: nil, name: nil, email: nil, created_at: nil, updated_at: nil, password_digest: "$2a$10$a98/zxfH0zaT0Hh.xalVPOxwbJiXAkH17BiRg.sV4hw...">
2.2.1 :003 > u.name
=> "asd"
2.2.1 :004 > u.email
=> "aedede@aece.com"
2.2.1 :005 > u.password
=> "qweasd"
2.2.1 :009 > u.save
(0.2ms) begin transaction
User Exists (0.2ms) SELECT 1 AS one FROM "users" WHERE LOWER("users"."email") = LOWER('aedede@aece.com') LIMIT 1
SQL (0.4ms) INSERT INTO "users" ("password_digest", "created_at", "updated_at") VALUES (?, ?, ?) [["password_digest", "$2a$10$a98/zxfH0zaT0Hh.xalVPOxwbJiXAkH17BiRg.sV4hwFXp2jUiTnm"], ["created_at", "2015-06-10 02:42:22.437148"], ["updated_at", "2015-06-10 02:42:22.437148"]]
(130.8ms) commit transaction
=> true
2.2.1 :010 > u
=> #<User id: 3, name: nil, email: nil, created_at: "2015-06-10 02:42:22", updated_at: "2015-06-10 02:42:22", password_digest: "$2a$10$a98/zxfH0zaT0Hh.xalVPOxwbJiXAkH17BiRg.sV4hw...">
2.2.1 :011 > u.name
=> "asd"
我已经彻底检查了所有内容,无法找到引起这种情况的因素,对于实际发生的事情的任何见解都将深受赞赏。
答案 0 :(得分:-1)
password
不是数据库users
中的列,也不是它的列。这只是一个属性。如果您使用过has_secure_password
,那么Rails将自动获取您指定的password
,对其进行加密,并在数据库中存储password_digest
。数据库中没有password
列。
在Rails 4.2中,您不需要在模型中使用列名写attr_accessor
。如果您已在迁移中定义它们,Rails将自动创建getter / setter以及一系列其他帮助方法。因此,模型User
在Rails 4.2中应如下所示:
class User < ActiveRecord::Base
has_secure_password
validates :password, presence: true, length: { minimum: 6 }
end