首頁  >  問答  >  主體

ruby - 在ror中正确的将变量传到view的做法是怎么的?

初学ruby,ror中生成了一个controller和view,代码如下:

class MyController < ApplicationController
  def index
    @output="123"
  end
end

我的问题是,为什么变量必须加上AT才能传入view?如果去掉AT,就会报错,AT是什么关键字还是框架约定?什么原理?如果可以请告诉我通识的写法,谢谢

也许这个问题太无聊,但我不太清楚该如何描述,所以也没有搜索到相关信息。

黄舟黄舟2713 天前692

全部回覆(4)我來回復

  • 巴扎黑

    巴扎黑2017-04-21 11:19:50

    Ruby中的@var是實例變量,在類別的所有方法中都可以訪問到;不包含@的變量,它的作用域就是當前方法內。

    ROR是在目前方法執行完之後,透過呼叫另外一個方法來渲染模板。這樣在兩個方法之間傳遞變量,最方便的就是使用實例變數了。如果用普通變數的話,超出了作用域,自然會報錯。

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-21 11:19:50

    @開頭的變數在Ruby裡是實例變量,與之相對,@@開頭的變數是類別變數。
    Rails裡在控制器和視圖之間是透過實例變數來傳遞資料的。這個過程是預設的,不需要顯式傳遞。

    記住這個規則就可以。

    回覆
    0
  • 天蓬老师

    天蓬老师2017-04-21 11:19:50

    Ruby 裡的 @ 就相當於 Python 裡的 self

    回覆
    0
  • 黄舟

    黄舟2017-04-21 11:19:50

    使用@開頭的變數為實例變數.
    在你的場景下,當你發起http請求後,被rails路由機制,匹配到MyController的index方法做回應.
    於是會發生下面的事:
    1.初始化一個MyController實例,執行index方法.
    2.設定該控制器的實例變數@output為'123'.
    3.由於你未特殊指定任何render,將預設渲染index.html.erb
    4.拷貝控制器的所有實例變數(去除掉部分不應該被拷貝的)
    5.實例化一個view,並將剛從控制器中拷貝出的實例變數設定到該view中.
    6.這樣你就可以在view中取得到這個實例變數了.

    回覆
    0
  • 取消回覆