2010-07-22 3 views
0

Cela sera probablement plus facile si j'explique ce que j'essaie de faire. J'ai trois actions dans mon contrôleur d'application Rails, chacune affichant une page différente. Le rendu de page est effectué avec un seul partiel qui utilise des variables définies dans le code d'action du contrôleur. Par exemple, chaque page contient une liste, mais sur une page, la liste est triable. Jusqu'à présent, j'ai géré cela en mettant un drapeau @sortable à vrai ou faux dans le code pour mes actions.Comment conserver les données concernant la page sur laquelle vous êtes dans l'application Rails

Cela fonctionne correctement lorsqu'une action est exécutée initialement. Le problème est que j'ai AJAX choses en cours (par exemple en ajoutant un nouvel élément à la liste) et quand cela arrive, j'ai besoin de connaître à nouveau la valeur de la variable @sortable. Il semble avoir disparu, même si techniquement, je suis toujours sur la même longueur d'onde. Ce que je veux, c'est un magasin variable qui est lié à la page que vous êtes sur.

Quelles sont vos recommandations pour ce faire? (Stockage dans les rails session hachage semble overkill - trop peu de chance que la mauvaise valeur se laisser là par une action encore à être mis en œuvre.)

Ben

Répondre

1

dans des rails, je n'ai réussi à mettre la page pour les variables scope configuration initiale aussi.

Je pense que la seule solution serait de passer le drapeau triable de la page sur la requête ajax. Vous pouvez le stocker soit avec une variable javascript, dans un champ caché, un attribut personnalisé sur votre liste ou de toute façon, puis dans l'ajax vous ajoutez simplement cela à la demande afin que vous puissiez traiter cela sur le côté serveur de façon persistante.

+0

Hmm, oui, il semble qu'il pourrait y avoir une meilleure façon de faire cela - savoir ce que je veux dire? En ce moment j'expérimente en les mettant dans le 'flash ', qui semble fonctionner jusqu'ici - je dois juste regarder qu'ils ne sont pas imprimés dans le dossier de disposition! – Ben

+0

Après avoir fait beaucoup de recherches sur celui-ci, je pense que vous avez raison Angelus. Aller devoir mordre la balle. – Ben

1

Pourquoi ne voulez-vous » Je ne veux pas utiliser la session? Quant à moi before_filter fonctionne très bien pour des tâches

dans ApplicationController

before_filter :init_actions 

def init_actions 
    session[:action] = action_name 
    session[:controller] = controller_name 
end 
+0

J'avais oublié before_filter - de cette façon, je pouvais m'assurer qu'il soit toujours réglé quelle que soit l'action. Mon problème avec la session est plus un problème de principe: ces variables ne sont pas de portée de session, elles sont page-portée (ou action-portée si vous voulez). – Ben

+0

Si vous ne voulez pas utiliser les sessions simplement les enregistrer en tant que variables et vous pouvez les accés à vos wievs def init_actions @current_action = nom_action @current_controller = nom_contrôleur fin – Bohdan

+0

qui ne me aider. La portée des variables est la même que celle du contrôleur dans lequel elles résident, et l'instance du contrôleur est «disparue» une fois que ma page a été rendue dans mon navigateur. Les appels AJAX sous-équivalents n'ont pas accès à ce contrôleur. – Ben

Questions connexes