J'ai essayé d'avoir la tête autour de rendu_to, mais je n'ai pas eu beaucoup de succès.
essentiellement, j'ai des méthodes de contrôleur: p> ce que je peux ' t comprendre est comment accomplir cela. À l'origine, je voulais juste rendre le premier fichier.html.erb, mais cela ne semblait pas fonctionner non plus. P> Merci P> Edit: J'apprécie les réponses que j'ai reçues, mais tous d'entre eux ont tendance à éviter d'utiliser la méthode de rendu ou Redirect_to. Est-ce fondamentalement le cas que vous ne pouvez pas passer des variables du contrôleur au contrôleur? Je dois penser qu'il y a un moyen mais je ne peux pas sembler le trouver. P> p>
4 Réponses :
Je n'ai généralement pas mes contrôleurs qui appellent les actions de chacun. Si vous avez un identifiant qui commence par une lettre majuscule, en rubis qui est une constante. Si vous souhaitez une variable de niveau d'instance, faites-le commencer par @.
@var1 = ["Hello", "Goodbye"]
Essentiellement, j'essaie de faire un processus en plusieurs étapes dans lequel un utilisateur télécharge un fichier, puis je le traite et re-présentez-le à leur permettre de les laisser apporter certaines modifications, puis insérez-la enfin dans une base de données. Pour ce faire, je dois pouvoir transmettre cet objet à un autre contrôleur ou au moins une autre vue de contrôleurs.
Plutôt que de faire cela pourquoi ne pas stocker les résultats intermédiaires de votre fonctionnement dans la base de données et le signaler comme incomplet. De cette façon, vous savez que vous avez accès à travers le modèle normal et que vous êtes résilient aux défaillances du serveur.
Ce n'est pas une bonne idée d'assigner l'objet à une constante. Ceci est dans un espace global, mais il est global pour tout le monde afin que tout autre utilisateur puisse faire cette demande obtiendra cet objet. Il y a quelques solutions à cela.
Je suppose que vous avez une forme en plusieurs étapes que vous traversez. Dans ce cas, vous pouvez transmettre les attributs définis comme champs masqués. P>
def first @item = Item.new(params[:item]) session[:item_attributes] = @item.attributes end def second @item = Item.new(session[:item_attributes]) @item.attributes = params[:item] end
Salut Ryan, est l'option de session toujours valable dans les rails 3? Si je stocke @ item.Attributes code> Il stocke des attributs protégés tels que ID et Timestamps en tant que nil, tenter de créer un nouvel objet à partir de cette session entraîne une erreur de massassIssignmationCrity
objet.atributes.slice ('champ1', 'champ2') code> semble être le moyen d'aller simplement remplacer le champ1 et le champ2 avec quels champs sont nécessaires.
Avez-vous envisagé d'utiliser le hachage flash? Beaucoup de gens l'utilisent uniquement pour les messages d'erreur et similaires, il est explicitement pour le type de transaction de données qui vous intéressent peut-être.
Fondamentalement, la méthode Flash renvoie un hachage. Toute valeur que vous attribuez à une clé dans le hachage sera disponible pour l'action suivante, mais elle est partie. Donc: P>
def first flash[:var] = ["hello", "goodbye"] redirect_to :action => :second end def second @hello = flash[:var].first end
Way 3
P>
sérialiser l'objet et y inclure sous la forme quelque part, et désérialisez-le des paramètres de la demande suivante. Vous pouvez donc stocker des attributs de la session. P>
class BarsController < UsersController before_filter :init_foo_list def method1 render :method2 end def method2 @foo_list.each do | item| # do something end end def init_foo_list @foo_list ||= ['Money', 'Animals', 'Ummagumma'] end end
Rails.cache.write("list",[1,2,3]) Rails.cache.read("list")
Way 5 Way 6 Way 7 Way 8
Vous pouvez utiliser le cache de rails.
p>
Dans un magasin d'action, la valeur de la table DB basée sur l'ID de session et d'autres actions peut la récupérer à partir de la DB basée sur l'ID de session. P> LI>
P>
def new
@test_suite_run = TestSuiteRun.new
@tests = Test.find(:all, :conditions => { :test_suite_id => params[:number] })
flash[:someval] = params[:number]
end
def create
@test_suite_run = TestSuiteRun.new(params[:test_suite_run])
@tests = Test.find(:all, :conditions => { :test_suite_id => flash[:someval] })
end
De l'action envoyée à la vue et à nouveau de la vue envoyée à d'autres actions dans Controller. P> LI>
ol>