検索

ホームページ  >  に質問  >  本文

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

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

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

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

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

黄舟黄舟2779日前757

全員に返信(4)返信します

  • 巴扎黑

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

    Ruby の

    @var はクラスのすべてのメソッドでアクセスできるインスタンス変数です。@ を含まない変数のスコープは現在のメソッド内にあります。

    ROR は、現在のメソッドが実行された後に別のメソッドを呼び出してテンプレートをレンダリングします。このように、2 つのメソッド間で変数を渡す最も便利な方法は、インスタンス変数を使用することです。通常の変数を使用してスコープを超えた場合は、当然エラーが報告されます。

    返事
    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 のインデックス メソッドと一致します。
    したがって、次のことが起こります:
    1. MyController インスタンスを初期化し、index メソッドを実行します。
    2. コントローラーのインスタンス変数 @output を「123」に設定します
    3. 特にレンダリングを指定していないため、index.html.erb がデフォルトでレンダリングされます
    4. コントローラーのすべてのインスタンス変数をコピーします (コピーすべきでないものは削除します)
    5. ビューをインスタンス化し、コントローラーからビューにコピーしたインスタンス変数を設定します。
    6. このようにして、ビューでこのインスタンス変数を取得できます。

    返事
    0
  • キャンセル返事