我是Rails的新手(我使用的是Rails 4.0.0)。我想从头开始编写用户管理,而不使用流行的解决方案。所以,这是我的问题。
我在UsersController中激活了操作:
# GET /users/activate/:code
def activate
if Activation.activate(params[:code])
redirect_to root_path, notice: t('users.activation.success')
else
redirect_to root_path, alert: t('users.activation.failure')
end
end
这是激活模型中的激活方法:
def self.activate(activation_code)
if a = Activation.find_by_code(activation_code)
a.destroy
return true
else
return false
end
end
我的问题是,在传递有效代码以激活操作后,我收到了我的错误消息(users.activation.failure
),但事实上,带有激活码的记录会从数据库中消失。在离开a.destroy
取消注释时,我注意到日志中有些奇怪:
Started GET "/users/activate/f6dc4cccea5880d77821f0455ec9adf8" for 127.0.0.1 at 2013-09-25 18:53:54 +0200
...
Redirected to http://localhost:3000/
Completed 302 Found in 37ms (ActiveRecord: 30.5ms)
Started GET "/" for 127.0.0.1 at 2013-09-25 18:53:54 +0200
...
Completed 200 OK in 22ms (Views: 21.1ms | ActiveRecord: 0.0ms)
Started GET "/users/activate/f6dc4cccea5880d77821f0455ec9adf8" for 127.0.0.1 at 2013-09-25 18:53:55 +0200
...
Redirected to http://localhost:3000/
Completed 302 Found in 4ms (ActiveRecord: 0.7ms)
Started GET "/" for 127.0.0.1 at 2013-09-25 18:53:55 +0200
...
Completed 200 OK in 16ms (Views: 15.2ms | ActiveRecord: 0.0ms)
对一个实际请求有两个/users/activate/f6dc4cccea5880d77821f0455ec9adf8
个请求。但是当我试图评论u.destroy
时,似乎工作得很好(没有双重请求)。
我的问题:我做错了什么?
答案 0 :(得分:0)
为什么需要单独的激活模型?只需将激活码和激活日期放入用户表即可。
答案 1 :(得分:-1)
我认为做变量赋值而不是评估条件就是问题所在。这将有效:
def self.activate(activation_code)
a = Activation.find_by_code(activation_code)
if a.present?
a.destroy
return true
else
return false
end
end