Comment puis-je passer des objets à partir d'un contrôleur à l'autre dans les rails?
J'ai essayé d'obtenir ma tête autour de render_to mais je n'ai pas eu beaucoup de succès.
Essentiellement, j'ai méthodes de contrôleur:
def first
#I want to get the value of VAR1 here
end
def second
VAR1 = ["Hello", "Goodbye"]
render_to ??
end
Ce que je ne peux pas savoir comment faire. À l'origine, je voulais juste rendre le premier.html.erb fichier, mais cela ne semble pas fonctionner non plus.
Grâce
Edit: j'apprécie les réponses que j'ai reçues, cependant tous ont tendance à éviter d'utiliser la méthode render ou redirect_to. Est-il fondamentalement le cas, alors que vous ne pouvez pas vous passer des variables à partir de contrôleur de contrôleur? Je pense qu'il y a une certaine façon, mais je n'arrive pas à le trouver.
OriginalL'auteur John Baker | 2009-08-17
Vous devez vous connecter pour publier un commentaire.
Ce n'est pas une bonne idée d'affecter l'objet d'une constante. Cela est vrai dans un espace global, mais il est global pour tout le monde pour tout autre utilisateur d'aller à cette demande vise à obtenir cet objet. Il existe quelques solutions à ce.
Je suis en supposant que vous avez un formulaire à plusieurs étapes que vous allez à travers. Dans ce cas, vous pouvez passer l'ensemble des attributs que les champs cachés.
Si il y a beaucoup de champs, cela peut être fastidieux de sorte que vous pouvez faire une boucle par la
params[...]
de hachage ou column_names méthode pour déterminer les attributs de passer.Sinon, vous pouvez stocker les attributs de la session.
Troisièmement, comme Paul Keeble mentionné, vous pouvez enregistrer le modèle de la base de données mais le marquer comme incomplète. Vous souhaiterez peut-être utiliser un l'état de la machine pour cela.
Enfin, vous pouvez prendre un coup d'oeil à la Agit Comme Assistant plugin.
@item.attributes
il stocke les attributs protégés comme id et les horodatages nul, de tenter de construire un nouvel objet à partir de cette session, plus tard, les résultats dans un MassAssignmentSecurity Erreurobject.attributes.slice('field1', 'field2')
semble être la voie à suivre il suffit de remplacer champ1 et champ2 avec tout ce que les champs sont nécessaires.Génial Ryan j'avais été à la recherche de cette réponse pour un long moment!!!
OriginalL'auteur ryanb
J'ai l'habitude de ne pas avoir mon contrôleurs d'appel uns et des autres actions. Si vous avez un identifiant qui commence par une lettre majuscule, en Ruby, qui est une constante. Si vous voulez une instance de niveau variable, il faut la commencer avec @.
Pouvez-vous nous expliquer quel est votre objectif?
Plutôt que de faire cela, pourquoi ne pas stocker les résultats intermédiaires de vos ouvrages dans la base de données et le signaler comme étant incomplète. De cette façon, vous savez que vous arrivez à y accéder par le modèle comme d'habitude et vous sont résistants à la défaillance d'un serveur.
OriginalL'auteur Andy Gaskell
Avez-vous envisagé d'utiliser le flash de hachage? Beaucoup de gens l'utilisent uniquement pour les messages d'erreur et autres, il est explicitement pour le tri des données transitoires en passant, vous pourriez être intéressé par.
Fondamentalement, le flash de la méthode retourne la valeur de hachage. La valeur que vous attribuez à une clé dans la table de hachage sera disponible à la prochaine action, mais ensuite c'est fini. Donc:
OriginalL'auteur Judson
Variable globale
(échec lors de demandes simultanées)
variable de classe
(échec lors de demandes simultanées)
3
Sérialiser l'objet et l'inclure dans le formulaire de quelque part, et
désérialiser à partir des paramètres dans la requête suivante. de sorte que vous pouvez stocker les attributs de la session.
Le flash fournit un moyen de passer des objets temporaires entre les actions. Tout ce que vous placez dans le flash sera exposé à la prochaine action, puis effacée.
5
vous pouvez utiliser des rails de cache.
Mais ce qui arrive quand les différentes sessions ont des valeurs différentes?
À moins de vous assurer de l'unicité des noms de liste à travers la session de cette solution échoue lors de demandes simultanées
façon 6
Dans une action de stocker la valeur dans la table db basé sur l'id de session et d'autres actions qui peuvent les récupérer à partir de db basé sur l'id de session.
voie 7
way 8
De l'action et envoyé à vue et à nouveau de la vue envoyées à d'autres actions dans le contrôleur.
OriginalL'auteur praaveen