0
votes

Pourquoi les nouvelles instances de contrôleur ont-elles le même objet_id?

J'ai le code suivant:

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


1 commentaires

Il ne suit pas logiquement que deux instances de contrôleur auraient différents identifiants d'objet. Compte tenu de suffisamment de temps entre les deux demandes de la première à prendre des déchets, elle ne suit que logiquement que la probabilité des deux instances de contrôleur ayant les mêmes identifiants d'objet est faible.


3 Réponses :


0
votes

Par exemple, le référent de auto est un objet de ArticlesController , lorsque vous avez démarré le serveur, articlesController est attribué à un objet objet_id < / code>. Lorsque vous l'appelez dans le contexte de la classe, il renvoie le même objet_id à chaque fois.


2 commentaires

Bonjour, @hererminio, chaque fois que le navigateur apporte une demande à l'étatController La nouvelle instance d'articlesController avec le même objet_id est créée - est-ce ce que vous dites?


J'ai essayé de faire le moins de changement minimum à votre réponse pour la rendre grammaticale et de donner un sens, mais ce n'est toujours pas clair ce que vous dites.



0
votes

Dans Actions Nouveau et créez, l'objet n'a pas changé.

Self.class

Le même numéro sera retourné sur tous les appels à Object_ID pour un objet donné, et aucun objet actif ne partagera un identifiant. [objet_id]


0 commentaires

4
votes

Lorsque vous écrivez self.class.object_id , vous posez le object_id de votre classe articlesController , pas instance . Bien sûr, ils seront les mêmes.

Essayez self.object_id ou juste objet_id , et vous verrez qu'ils sont différents.


1 commentaires

objet_id suffit. Self n'est plus nécessaire (il était nécessaire lorsque vous appelez classe ).