当我调用Shoes#'visit'时,为什么会丢失我的实例变量?

时间:2009-08-18 16:47:53

标签: ruby shoes

我确定这与鞋子中提到的错综复杂有关>手册>规则,但我只是不明白。如果有人愿意在下面的代码中解释为什么@var == nil ... 我以为我可以使用访问在我的应用程序中的不同视图之间切换,但如果我失去所有状态,这将无效。

class MyShoe < Shoes
  url '/', :index
  url '/somewhere', :somewhere

  def index
    @var = para link( "go somewhere", :click => "/somewhere" )
  end

  def somewhere
    para "var = #{@var.inspect}"  
  end
end

Shoes.app

1 个答案:

答案 0 :(得分:2)

_为什么他自己已经回答了这个问题,我会在一分钟内做到这一点。首先,在不同URL之间传递数据(特别是字符串)的最简单方法是这样的:

class MyShoe < Shoes
  url '/', :index
  url '/somewhere/(\d+)', :somewhere

  def index
    @var = para link( "What is 2 + 2?", :click => "/somewhere/4" )
  end

  def somewhere(value)
    para "2 + 2 = #{value}"  
  end
end

Shoes.app

它将匹配正则表达式的子组,并将匹配的字符串作为参数传递给方法。偶尔有用,但匆忙变得笨拙。另一种解决方案是使用常量或类变量,如_why explains here

  
    

好的,所以进一步愚弄它看起来像所有实例变量

         

在Shoes子类中的每个方法的开头擦除     我猜是的。那么什么是获得一些数据的首选方式     这是从一个鞋子URL到另一个鞋子的URL?从一页传递它     到URL中的下一个工作 - 如果它是一个字符串。如果不是     一个字符串,你应该使用什么 - @@ class_variables?

  
     

当然可以使用类var。那些   保证始终存在   应用程序的生命。或者是常数。

     

此外,Shoes附带了SQLite3数据   可以通过那里。

在您的示例中,它看起来像这样:

class MyShoe < Shoes
  url '/', :index
  url '/somewhere', :somewhere

  def index
    @@var = para link( "go somewhere", :click => "/somewhere" )
  end

  def somewhere
    para "var = #{@@var.inspect}"  
  end
end

Shoes.app