[英]Rails - destroying object, redirect_to and double request
我是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
注释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
进行评论u.destroy
它似乎工作得很好(没有双重请求)。
我的问题是:我在做什么错?
为什么需要单独的模型进行激活? 只需在用户表中输入激活码和激活日期即可。
我认为执行变量分配而不是评估条件是问题。 这将起作用:
def self.activate(activation_code)
a = Activation.find_by_code(activation_code)
if a.present?
a.destroy
return true
else
return false
end
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.