初學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中取得到這個實例變數了.