【发布时间】:2019-02-05 15:02:17
【问题描述】:
我试图了解控制器类和 Rails 中的 .html.erb 视图文件是如何连接的,以及视图如何访问控制器方法中的数据。例如,我有以下控制器类:
class SomeController < ApplicationController
def show
# defining some data to access in the view
x = 1
@y = 2
end
end
如果在相应的.html.erb视图文件中,我尝试访问@y,这样就可以了
<p> <%= @y %> </p>
但是,如果我尝试访问 x,则会出现错误
<p> <%= x %> </p>
未定义的局部变量或方法'x'
从概念上讲,为什么 @y 可以在 .html.erb 视图中访问,而 x 却不能。
PS:我应该补充一点,我知道带有 @ 的变量表示 Ruby 中的实例变量,所以(我认为)@y 将是 SomeController 实例的实例变量。但是,我不清楚这会如何影响 .html.erb 视图文件可以从 SomeController 访问的内容。
【问题讨论】:
-
你需要了解
local variables和instance variables -
我明白了,所以局部变量只在方法内有作用域,而视图文件可以访问控制器实例。有道理!
-
A
local variable仅在当前context中具有范围,这意味着如果您将其定义为inside一个方法,则该方法的outside无法访问它,但是instance variable具有整个范围class的一个实例,它们可用于在同一instance上调用的任何方法中。
标签: ruby-on-rails model-view-controller erb