【问题标题】:reset_session in rails 3.2 is not workingrails 3.2 中的 reset_session 不起作用
【发布时间】:2014-08-25 21:14:03
【问题描述】:

我将 Rails 3.2.13 与 Ruby 1.9.3 一起使用,而不是使用 Devise。

我正在编写脚本以在每次登录后重置会话。请检查以下代码并指出问题。

在使用 reset_session 之前,一切都很好。我想使用 reset_session 功能。

会话控制器

class SessionsController < ApplicationController
  skip_before_filter :is_loggedin?, :only => [:new, :create]
  def create
  render :update do |page|
    if !params[:email].blank? && !params[:password].blank?
     if user = User.authenticate(params[:email], params[:password])
      if user == "unuser"
        page.alert("Your username and/or password was incorrect.")
         elsif !user.account_id.blank?

        temp_session = session.dup
        reset_session
        session.replace(temp_session)

        # temp = session
        # reset_session
        # session.reverse_merge!(temp)

        if params[:remember_me]
          cookies.permanent[:user_id] = user.id
        else
          cookies[:user_id] = user.id
        end
        user.update_attributes(:last_login => Time.now, :is_online => true)
        user.update_attributes(:time_zone => cookies["time_zone"])

        if user.user_type=="teacher"
          page.redirect_to home_teachers_path(:account_id =>user.account_id)
        else
          page.redirect_to home_students_path(:account_id =>user.account_id)
        end
      else
        page.alert("You have not confirmed the activation link yet. Please check your registered email ")
      end
    else
      page.alert("Invalid user/password.")
    end
  else
    page.alert("You can't leave the fields empty.")
   end
  end
end
end

下面显示错误日志:

Started POST "/sessions" for 127.0.0.1 at 2014-07-04 19:04:22 +0530
Processing by SessionsController#create as JS
Parameters: {"utf8"=>"✓", "authenticity_token"=>"i123213232323233123+dfdfi/3424324324", "email"=>"teacher@gmail.com", "password"=>"[FILTERED]"}
User Load (0.2ms)  SELECT `users`.* FROM `users` WHERE `users`.`email` = 'teacher@gmail.com' LIMIT 1
Completed 500 Internal Server Error in 20ms

NameError - undefined local variable or method `reset_session' for #<#<Class:0x000000068995a8>:0x000000075c44f8>:
app/controllers/sessions_controller.rb:26:in `block in create'
prototype-rails (3.2.1) lib/action_view/helpers/prototype_helper.rb:152:in `block in initialize'
actionpack (3.2.13) lib/action_view/helpers/capture_helper.rb:187:in `with_output_buffer'
prototype-rails (3.2.1) lib/action_view/helpers/prototype_helper.rb:151:in `initialize'
prototype-rails (3.2.1) lib/prototype-rails/renderers.rb:7:in `block in <module:Renderers>'
actionpack (3.2.13) lib/action_controller/metal/renderers.rb:35:in `block in _handle_render_options'

【问题讨论】:

标签: ruby-on-rails ruby ruby-on-rails-3


【解决方案1】:

问题是您在 render :update 块中执行所有这些操作。

self 块内部不再是控制器,这就是为什么你不能调用reset_session(它是控制器的视图上下文)。

如果我是你,我会尝试从输出中解开控制器逻辑(即 render :update 产生的内容)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多