为什么控制器的新实例具有相同的object_id?

时间:2019-02-17 09:35:32

标签: ruby-on-rails ruby

我有以下代码:

class ArticlesController < ApplicationController
  def new
    p self.class.object_id
    @article = Article.new
  end

  def create
    p self.class.object_id
    @article = Article.new(article_params)
    if @article.save
      redirect_to @article
    else
      render 'new'
    end
  end

  private

  def article_params
    params.require(:article).permit(:title, :text)
  end
end

Rails为每个请求创建一个新的控制器实例,因此我认为它们具有不同的对象ID。但是,self.class.object_idnewcreate动作中返回相同的值。为什么会这样呢?

3 个答案:

答案 0 :(得分:4)

撰写buttonsContainer时,您是在问您的班级的self.class.object_id object_id,而不是实例。当然,它们将是相同的。

尝试ArticlesController或仅尝试self.object_id,您会发现它们是不同的。

答案 1 :(得分:0)

由于self的引用对象是ArticlesController的对象,因此在启动服务器时,ArticlesController被分配了object_id。在类的上下文中调用它时,它每次都返回相同的object_id

答案 2 :(得分:0)

在新建动作和创建动作中,对象未更改。

  

self.class

对于给定对象的所有对object_id的调用将返回相同的编号,并且没有两个活动对象将共享一个id。[Object_id]