Ruby on Rails中的@variables

@titletitle什么区别? 由于它们都可以是variables名称。 另外,如何决定我应该使用哪种types的variables? 用@还是不行?

title是一个局部variables。 它们只存在于其范围内(当前块)

@title是一个实例variables – 可用于类中的所有方法。

你可以在这里阅读更多: http : //strugglingwithruby.blogspot.dk/2010/03/variables.html

在Ruby on Rails中 – 在控制器中声明你的variables作为实例variables( @title )使它们可用于你的视图。

区别在于variables的范围。 @version可用于类实例的所有方法。

简短的回答,如果你在控制器,你需要使variables可用的视图,然后使用@variable

对于更长的答案试试这个: http : //www.ruby-doc.org/docs/ProgrammingRuby/html/tut_classes.html

当你希望variables在视图中可用时,在控制器中使用@title

解释是@title是一个实例variables, title是一个局部variables,而rails使控制器的实例variables可用于视图。 发生这种情况是因为模板代码(erb,haml等)在当前控制器实例的范围内执行。

@variablevariabless在ruby中被称为实例variables。 这意味着你可以在类的任何方法中访问这些variables。 [在课堂上的所有方法]

不带@符号的variables称为局部variables,这意味着您只能在THAT DECLARED METHOD中访问这些局部variables。 局限于当地范围。

实例variables示例:

 class Customer def initialize(id, name, addr) @cust_id = id @cust_name = name @cust_addr = addr end def display_details puts "Customer id #{@cust_id}" puts "Customer name #{@cust_name}" puts "Customer address #{@cust_addr}" end end 

在上面的例子中@cust_id@cust_name@cust_addr在类中的另一个方法中访问。 但是同样的东西不能用局部variables访问。

局部variables只能从初始化的块中访问。 另外一个局部variables以小写字母(az)或下划线(_)开头。

而实例variables是self一个实例,并以@开始。另外一个实例variables属于对象本身。 实例variables是你在.send等执行方法的variables

例:

 @user = User.all 

@user是实例variables

未初始化的实例variables的值为Nil

@variables是实例variables,而不是局部variables。

阅读http://ruby.about.com/od/variables/a/Instance-Variables.htm