ste*_*och 2 ruby ruby-on-rails-3
Railscast 第275集 - 我如何测试使用以下代码向用户发送密码重置:
def send_password_reset
generate_token(:password_reset_token)
....
... etc
end
def generate_token(column)
begin
self[column] = SecureRandom.urlsafe_base64
end while User.exists?(column => self[column])
end
Run Code Online (Sandbox Code Playgroud)
我的问题是倒数第二行代码:end while User.exists?(column => self[column])它的工作原理很好,但是如果换掉哈希火箭就会导致我的规格失败,即end while User.exists?(column: self[column])
Failure/Error: user.send_password_reset
ActiveRecord::StatementInvalid:
SQLite3::SQLException: no such column: users.column: SELECT 1 FROM "users" WHERE "users"."column" = 'Y7JJV4VAKBbf77zKFVH7RQ' LIMIT 1
Run Code Online (Sandbox Code Playgroud)
为什么会这样?是否有必须使用哈希火箭的情况,是否有任何指导方针?
column在那行代码中不是符号,它是一个变量,所以你需要使用哈希火箭.column: self[column]将构建一个散列,其中键是符号:column,而不是变量的值column,这是你想要的.
使用文字符号作为键(key: value而不是:key => value)时,新语法只是一种快捷方式.如果您使用的是变量键,=>则仍需要语法.
| 归档时间: |
|
| 查看次数: |
692 次 |
| 最近记录: |