ruby-on-rails-3.2 - 无法在 Ruby on Rails 中将变量写入 session

标签 ruby-on-rails-3.2

这是我使用的一些代码,只是为了避免对 session 变量进行硬编码。

#application_controller
  def redirect_to_new_order?
    session[:redirect_to_new_order]
  end

  def redirect_to_new_order=(value)
    session[:redirect_to_new_order] = value
  end

#another_controller
#.............
def some_action
   redirect_to_new_order = true
   #viewed by debugger
   # redirect_to_new_order? is equal to nil 
   # session[:redirect_to_new_order] is equal to nil as well
end

如您所见,由于某种原因,redirect_to_new_order?session[:redirect_to_new_order]nil

为什么会发生这种情况?

更新: 这是类似于上面给出的代码。但它确实调用了方法并且不创建局部变量。为什么?

class SomeClass

    def initialize
        @some_var = "999"
    end
    def var1
        @some_var
    end

    def var1=(value)
        @some_var=value
    end

    def method1
      var1 = 111
      puts var1
      puts @some_var  
    end
end

a = SomeClass.new
a.method1 # prints 111 and 999 but why?

最佳答案

原因是您没有调用 redirect_to_new_order= 方法。相反,您将局部变量 redirect_to_new_order 设置为 true 值。作为健全性检查,将 raise "BOOM" 行添加到赋值方法中,您将看到该方法未被调用。

您需要一个显式接收器,否则您将在 Controller 中设置局部变量。

self.redirect_to_new_order = true

就可以了。

关于ruby-on-rails-3.2 - 无法在 Ruby on Rails 中将变量写入 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12253478/

相关文章:

JavaScript:输入意外结束...因为它只加载文件的一部分?

ruby-on-rails - 如何在 Rails 的 ERB 文件中检查开发或生产?

mysql - 按最近回答的问题排序并过滤特定用户未回答的问题

json - 如何使用coffeescript遍历JSON哈希

ruby - 如何提取给定属性的所有值并将它们放入数组中?

php - PHP MD5 key 的等效 ruby​​ 代码

ruby-on-rails - 防止 Rails 3.2.11 Assets 管道缓存?

ruby-on-rails - rake 规范中的 `uninitialized constant Rake`

ruby-on-rails - rails : devise update user without password

ruby-on-rails - Rails 3.2 无法批量分配 protected 属性 : r