所以从这个问题的逻辑: Instance variables through methods
Ruby on rails 是基于 Ruby 构建的框架,所以我假设上述问题的情况也会传播到 rails?因此,如果我有控制器帖子和方法,例如:
def index
@posts = Post.all
end
实例变量@posts 可用于在索引操作后调用的控制器中的所有操作?但是,如果我做对了,每次对服务器的请求都会再次实例化控制器的新实例,并且旧的实例会被垃圾收集,所以我不需要关注实例变量的这种“循环”覆盖?
所以在那种情况下,如果我们不谈论会话,我可以说 rails 中的实例变量具有“方法函数范围”(这在技术上是不正确的说法,因为它不是真的,但看起来像那样)?
编辑 1。@Sparda当我说“方法范围”时,我的意思是:我有名为 Demo 的控制器和内部的 2 个动作,名为action_1和action_2。
Controller Demo
def action_1
@posts_1 = Post.all
end
def action_2
@posts_2 = Post.where(#some_condition)
end
end
所以对于 demo/action_1 的第一个请求,控制器被实例化,然后 action_1 被调用并且@posts_1 被创建,然后默认视图被渲染并且请求被完成。因此控制器的实例(和所有实例变量)被垃圾收集。在这种情况下,action_2 永远不会被调用,所以@posts_2 永远不会被创建。(当然@posts_2 在 action_1 中不可用)。demo/action_2 也是如此,@posts_1 从未创建。
现在对于 demo/action_1,在 action_1 内部我想调用 action_2,然后创建 @posts_1,然后创建 @posts_2,现在 @posts_1 在 action_2 中可用?如果这是正确的,如果我用相同的名称命名这个变量(@posts_1 和@posts_2),那么来自 action_2 的这个当然会覆盖来自 action_1 的变量。
所以当我说“方法范围”时,我再次说这不是真的,我的意思是每个请求频繁创建和销毁控制器对象的这种性质,我不能使用来自其他动作的实例变量(action_2,action_3, ..., action_N) 如果我要演示/action_1。
我对这一切都很陌生,所以不要大喊大叫:D