84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
初学ruby,ror中生成了一个controller和view,代码如下:
class MyController < ApplicationController def index @output="123" end end
我的问题是,为什么变量必须加上AT才能传入view?如果去掉AT,就会报错,AT是什么关键字还是框架约定?什么原理?如果可以请告诉我通识的写法,谢谢
也许这个问题太无聊,但我不太清楚该如何描述,所以也没有搜索到相关信息。
人生最曼妙的风景,竟是内心的淡定与从容!
Ruby中的@var是实例变量,在类的所有方法中都可以访问到;不包含@的变量,它的作用域就是当前方法内。
ROR是在当前方法执行完之后,通过调用另外一个方法来渲染模板。这样在两个方法之间传递变量,最方便的就是使用实例变量了。如果用普通变量的话,超出了作用域,自然会报错。
@开头的变量在Ruby里是实例变量,与之相对,@@开头的变量是类变量。 Rails里在控制器和视图之间是通过实例变量来传递数据的。这个过程是默认的,不需要显式传递。
记住这个规则就可以。
Ruby 里的 @ 就相当于 Python 里的 self
使用@开头的变量为实例变量. 在你的场景下,当你发起http请求后,被rails路由机制,匹配到MyController的index方法做响应. 于是会发生下面的事情: 1.初始化一个MyController实例,执行index方法. 2.设置该控制器的实例变量@output为'123'. 3.由于你未特殊指定任何render,将默认渲染index.html.erb 4.拷贝控制器的所有实例变量(去除掉部分不应该被拷贝的) 5.实例化一个view,并将刚刚从控制器中拷贝出的实例变量设置到该view中. 6.这样你就可以在view中获取到这个实例变量了.
@
Ruby中的@var是实例变量,在类的所有方法中都可以访问到;不包含@的变量,它的作用域就是当前方法内。
ROR是在当前方法执行完之后,通过调用另外一个方法来渲染模板。这样在两个方法之间传递变量,最方便的就是使用实例变量了。如果用普通变量的话,超出了作用域,自然会报错。
@开头的变量在Ruby里是实例变量,与之相对,@@开头的变量是类变量。
Rails里在控制器和视图之间是通过实例变量来传递数据的。这个过程是默认的,不需要显式传递。
记住这个规则就可以。
Ruby 里的 @ 就相当于 Python 里的 self
使用
@
开头的变量为实例变量.在你的场景下,当你发起http请求后,被rails路由机制,匹配到MyController的index方法做响应.
于是会发生下面的事情:
1.初始化一个MyController实例,执行index方法.
2.设置该控制器的实例变量@output为'123'.
3.由于你未特殊指定任何render,将默认渲染index.html.erb
4.拷贝控制器的所有实例变量(去除掉部分不应该被拷贝的)
5.实例化一个view,并将刚刚从控制器中拷贝出的实例变量设置到该view中.
6.这样你就可以在view中获取到这个实例变量了.