首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过rails中的方法实现实例变量

通过rails中的方法实现实例变量
EN

Stack Overflow用户
提问于 2013-10-22 19:04:44
回答 1查看 1.3K关注 0票数 0

因此,根据这个问题的逻辑:Instance variables through methods

rails是构建在Ruby上的框架,所以我假设上述问题中的情况也会传播到rails?因此,如果我有控制器的帖子和方法,比如:

代码语言:javascript
复制
def index
    @posts = Post.all
end

实例变量@post是否适用于控制器中在索引操作之后调用的所有操作?但是如果im正确的话,对服务器的每一个请求--控制器的新实例--都会再次实例化,而旧的实例是垃圾收集的,所以我不需要观察实例变量的“周期性”覆盖吗?

因此,在这种情况下,如果我们不是在讨论会话,我可以说rails中的实例变量具有“方法-函数范围”(技术上不正确,因为这不是真的,但看起来是那样的)?

编辑1。@Sparda当我说“方法-作用域”时,我的意思是:我的控制器名为Demo,里面有两个动作,名为action_1action_2

代码语言:javascript
复制
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中不可用)。演示/action_2也是如此,@posts_1从未创建过。

现在,对于演示/ action_1,我想在action_1中调用action_2,然后调用@posts_1,然后创建@posts_2,现在@posts_1在action_2中可用?如果这是正确的,那么如果我用相同的名称命名这个变量(@posts_1和@posts_2),那么action_2中的这个变量当然会覆盖action_1中的变量。

因此,当我说“方法-作用域”时,我再次说它不是真的--我的意思是,如果我要演示/操作1._1,那么我就不能使用来自其他操作的实例变量(action_2,action_3,…,action_N),因为它是频繁地创建和破坏每个请求的控制器对象的本质。

我对这一切都不熟悉,所以不要大喊大叫。

EN

回答 1

Stack Overflow用户

发布于 2013-10-22 21:04:32

首先,是的,实例变量可以在不同的对象方法中更改,但是ruby传播您在类中使用setter和getter。所以你实际上从来没有手动设置过。

代码语言:javascript
复制
class Post 
  attr_accessor :message
end

等于

代码语言:javascript
复制
class Post

  def initialize
    @message
  end

  def message
    @message
  end

  def message=(m)
    @message = m
  end
end

所以当你这么做

代码语言:javascript
复制
p = Post.new
p.message = "Hello" #=> that will call "message=" method
p.message           #=> that will call "message" method

其次,Rails实例变量的行为方式完全相同。你经常用在模特身上。

最后一件事。实际上,你从来不亲自调用控制器,Rails也是这样做的。如果您查看routes.rb文件,您可以找到这样的一些路由:

代码语言:javascript
复制
get "posts", to: "posts#index"

这样就可以做PostsController.action(:index)了。因此,每当您调用"/posts“时,都会得到PostsController的新实例

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19526205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档