web-dev-qa-db-fra.com

Rails 3: Afficher la variable du contrôleur en vue

Je suis assez nouveau pour Rails et je me demandais comment afficher une variable de mon contrôleur dans ma vue.

En gros, j'ai 2 fichiers: articles_controller.rb et _article.html.erb

Dans mon fichier contrôleur, j'ai une variable @article_votes que je souhaite afficher sur ma vue. J'ai essayé d'utiliser <%= @article_votes %> mais il n'affiche rien du tout.

Quelqu'un aurait-il des conseils? Je vous remercie!

24
Ben

Je ne sais pas à quel point vous êtes nouveau chez Rails. Toute variable d'instance que vous définissez dans votre contrôleur est accessible dans les vues.

Donc si @article_votes est défini dans le contrôleur, en écrivant

<pre>
  <%= @article_votes.inspect %>
</pre>

quelque part dans votre vue devrait apparaître dans votre page.

Mais le _article.html.erb n'est pas affiché par défaut. Si vous avez une méthode show dans votre ArticlesController, la vue appelée show.html.erb est rendu. Ceci est une approche générale, donc pour la méthode index, elle doit être appelée index.html.erb.

J'espère que cela t'aides.

46
nathanvda

Si vous appelez un partiel, vous devrez lui passer la variable @article_votes.

<@= render 'article', :article_votes => @article_votes %>

Maintenant, dans votre partiel, vous pouvez utiliser

<%= article_votes %>
2
Trent

La sortie de <% = @article_votes%> dépendra de quelle classe le @article_votes est un objet et si vous effectuez ou non le rendu de ce modèle _article.html.erb

Appelez simplement <% = render: partial => 'article'%> dans le fichier index.html.erb ou tout autre fichier .html.erb nommé d'après l'action du contrôleur que vous utilisez pour essayer de rendre cette vue.

Normalement, provenant d'un contrôleur @article_votes serait un tableau (par convention) plusieurs noms désignent un tableau d'objets et un nom singulier désigne un objet spécifique d'une classe ActiveRecord basé sur une table appelée article_votes qui contiendrait toutes les valeurs contenues dans la table pour un enregistrement spécifique.

Assurez-vous que @article_votes est une instance d'une classe autre que nil

S'il ne s'agit que d'une chaîne (@article_votes = "A string"), vous le verrez dans votre vue. Si c'est le résultat d'un appel à ActiveRecord pour trouver tous les objets du modèle ArticleVotes, ce sera un tableau qui sera vide s'il n'y a rien dans le tableau. Vous devrez obtenir un objet spécifique de ce tableau, puis vous devrez choisir laquelle des méthodes disponibles sur cet objet vous souhaitez afficher

par exemple.

En supposant que la table article_votes comporte une colonne appelée nom et que vous avez 1 enregistrement article_vote dans cette table avec la valeur "Ceci est un nom", le code suivant dans l'action du contrôleur vous affichera "Ceci est un nom "sur votre écran

@article_vote = ArticleVote.first

Si vous aviez <% = @ article_vote.name%> dans votre partiel et en supposant que vous effectuez réellement le rendu partiel

2
jamesc

_article.html.erb est une vue partielle. Êtes-vous sûr que dans le navigateur, vous affichez l'action appropriée?

1
Arti

Une autre chose importante que je viens de rencontrer, c'est que les valeurs de vos variables doivent être définies avant votre appel au rendu.

J'avais un bloc "créer" standard où si le modèle n'était pas enregistré, il retournerait des erreurs. Dans ce cas, je définissais une variable d'instance pour que le nouveau rendu défile jusqu'à la forme où se trouvaient les erreurs.

Je ne pouvais pas comprendre pourquoi ma variable n'était pas définie alors que je la définissais clairement. Dès que je l'ai déplacé au-dessus de "l'action de rendu:: nouveau" cela a fonctionné.

0
gwnp