我正在经历Agile Web Development With Rails 4
并且已经达到了创建用户的程度。这样做是这样的:
rails generate scaffold User name:string password:digest
但是当我尝试运行rake db:migrate
时,我收到以下错误:undefined method digest'
原因是什么?我该如何解决?我用Google搜索digest
是rails 4
功能,那么它是怎么回事?
答案 0 :(得分:0)
修改强>
以下信息并不完全正确。看起来这个生成器功能的记录很少,但确实存在。使用密码:生成器中的摘要只需在迁移中创建一个名为password_digest的字符串列,并将has_secure_password添加到模型中。可以找到有关此功能的教程here。
我没有提到能够定义密码:Rails 4 Migrations Guide中的摘要。我也没有在实际的Rails 4 stable source中看到它。
你是正确的this page提到它是你可以做的事情,但是,看起来好像这个功能被删除或者还没有进入Rails 4稳定。
就修复它而言,似乎在Rails 4中,这些是您可以通过迁移定义的字段:
t.column
t.index
t.rename_index
t.timestamps
t.change
t.change_default
t.rename
t.references
t.belongs_to
t.string
t.text
t.integer
t.float
t.decimal
t.datetime
t.timestamp
t.time
t.date
t.binary
t.boolean
t.remove
t.remove_references
t.remove_belongs_to
t.remove_index
t.remove_timestamps
您可能必须将密码存储为字符串(但不要误解为我说"将纯文本密码存储为字符串"(!)......您仍然想要至少哈希它并可能加盐它。)这个视频应该在Rails中提供很多帮助:Authentication in Rails。
身份验证是一个复杂的问题,可能需要进行一些研究才能正确完成,但这非常值得。我强烈建议首先观看该视频并在Rails中了解用户身份验证,然后可能会查看一些可以使用的强化宝石。使用现有的宝石既具有功能齐全的优点,又具有开源社区的战斗力。如果您找到适合您需求的合适宝石并经过充分审核并积极维护,它通常会比您自己构建的更好。