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!
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.
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 %>
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
_article.html.erb
est une vue partielle. Êtes-vous sûr que dans le navigateur, vous affichez l'action appropriée?
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é.