Почему новые экземпляры контроллера имеют одинаковый object_id? - PullRequest
0 голосов
/ 17 февраля 2019

У меня есть следующий код:

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 создает новый экземпляр контроллера для каждого запроса, поэтому я предположил, что они имеют разные идентификаторы объектов.Однако self.class.object_id возвращает одинаковое значение в действиях new и create.Почему это так?

Ответы [ 3 ]

0 голосов
/ 17 февраля 2019

В действиях new и create объект не изменился.

self.class

Один и тот же номер будет возвращен при всех вызовах object_id для данногообъект, и никакие два активных объекта не будут иметь идентификатора. [Object_id]

0 голосов
/ 17 февраля 2019

Когда вы пишете self.class.object_id, вы спрашиваете object_id вашего класса ArticlesController, а не экземпляра .Конечно, они будут одинаковыми.

Попробуйте self.object_id или просто object_id, и вы увидите, что они разные.

0 голосов
/ 17 февраля 2019

Поскольку референт self является объектом ArticlesController, при запуске сервера ArticlesController назначается object_id.Когда вы вызываете его в контексте класса, он возвращает один и тот же object_id каждый раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...