繁体   English   中英

Rails-销毁对象,redirect_to和双重请求

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM