2010-07-18 1 views
2

Pourquoi les rails utilisent-ils les variables d'instance @poop au lieu d'une seule variable locale dans le code généré? Y a-t-il une situation commune prévue où c'est utile plutôt que d'utiliser simplement une variable locale ici? Je pense qu'il est logique d'utiliser une variable locale et ne pas attacher quelque chose à l'espace de noms d'objet sauf si vous en avez besoin là.Pourquoi les rails génèrent-ils des variables d'instance d'objet dans les contrôleurs

# GET /poop/1 
    # GET /poop/1.xml 
    def show 
    @poop = Poop.find(params[:id]) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.xml { render :xml => @poop } 
    end 
    end 

Répondre

4

Il est idiomatique d'utiliser des variables d'instance de contrôleur lorsque vous devez rendre ces valeurs disponibles dans les vues et les aides associées. Sinon, l'utilisation de variables locales dans la logique du contrôleur est probablement préférable. Cela dit, si vous trouvez que vos contrôleurs utilisent beaucoup de variables (indicatives de complexité), alors les meilleures pratiques suggèrent que vous déplaciez cette logique dans les modèles, en gardant les contrôleurs penchés.

6

Y a-t-il une situation courante prévue où c'est utile plutôt que d'utiliser simplement une variable locale ici?

Bien sûr, il y a. La situation par défaut est comme ça. Vérifiez le code source généré automatiquement (avec l'utilisation de script/generate/scaffold) vue en app/views/poops/show.html.erb:

<p> 
    <b>Field:</b> 
    <%=h @poop.field %> 
</p> 
<%= link_to 'Edit', edit_poop_path(@poop) %> 

Si la variable était locale à la méthode du contrôleur, comment l'accès renderer l'élément que vous avez trouvé avec find(params[:id])? respond_to n'appelle pas directement le composant qui restitue la page. Au lieu de cela, il retarde son exécution jusqu'au point où les variables locales seraient déjà hors de portée. La seule façon dont le moteur de rendu peut communiquer avec ce qui a été calculé dans le contrôleur est l'utilisation de variables d'instance.

Questions connexes