0

J'ai un widget pour les devises que j'utilise dans mon application. C'est à dire. l'utilisateur change la devise de EUR -> USD, ou environ 13 autres devises. J'ai quelques autres cas d'utilisation tels que les dates mais celui-ci est le plus facile à expliquer. La devise ne fait que mettre à jour une variable de session en appelant le contrôleur de devise, puis utilise certains JS pour recharger la page, mais je ne souhaite récupérer que certains éléments de la page (c'est-à-dire refléter le changement de devise et rien d'autre) ...partiels intelligents forme universelle dans les rails

$("#places_list").html("<%= escape_javascript(render :partial => 'places/list') %>"); 

ou si un autre contrôleur

$("#locations").html("<%= escape_javascript(render :partial => 'locations/places') %>"); 

mais ces éléments sont spécifiques au contrôleur de courant, ce qui rend une partie spécifique contrôleur comme une liste ... (le calcul de la monnaie elle-même est dans une application helper, donc aucune nouvelle logique ne se passe), et le contrôleur de devise est simple et partiellement chargé par différents contrôleurs. (Lieux, Lieux, etc.)

En plus de faire une action dans chaque contrôleur spécifique à cet effet, comment puis-je faire en sorte que je puisse rendre les éléments spécifiques au contrôleur actuel, afin que je puisse les remplacer intelligemment sur js, au lieu de recharger? C'est à dire. Je peux passer à la monnaie du régulateur de courant

<%= hidden_field_tag :info, controller.controller_name %> 

Je ne sais pas si tout cela est logique, mais j'espère qu'il fait, au moins dans mon propre cerveau sinon dans quelqu'un d'autre.

+0

un travail possible autour j'ai trouvé utilise le plugin render_component qui permettrait m e pour rendre une action de l'extérieur de mon contrôleur actuel ... je me demande juste s'il y a une meilleure façon, et si et pourquoi cela pourrait être une mauvaise idée? http: // github.com/vhochstein/render_component puisque le composant de rendu original a été extrait avant rails2, et nous vivons à l'ère de rails3. – holden

Répondre

0

J'ai essayé une petite application et serait ci-dessous être une solution pour vous,

d'abord, dans mon cas ce que je suis en train de faire est d'avoir un attribut appelé: info dans chaque modèle, pour que je puisse l'appeler (<% = f.texte_field: info%>) dans mes vues (veuillez noter que f peut être n'importe quelle instance d'un modèle)

pour cela j'ai besoin d'ajouter: attribut d'information à chaque modèle. Vous avez plusieurs façons de le faire

1 - créer une classe (qui hérite de AR :: Base et héritera de tous les autres modèles de la classe donnée) (mais il nécessite des changements de code)

2 - rapide et laid est moyen d'injecter mon: information attribut à AR :: classe de base (qui je l'ai fait;))

créer un fichier dans config/initializers dire curreny.rb et ajoutez ce code

module ActiveRecord 
class Base 
    attr_accessor :info 
end 
end 

après que de n'importe quelle vue que vous utilisez AR, aura l'attribut: info

Ex: utilisateurs/nouveaux

Nouvel utilisateur

<% form_for(@user) do |f| %> 
    <%= f.error_messages %> 

    <p> 
    <%= f.label :name %><br /> 
    <%= f.text_field :name %> 
    </p> 
    <p> 
    <%= f.label :info %><br /> 
    <%= f.text_field :info %> 
    </p> 
    <p> 
    <%= f.submit 'Create' %> 
    </p> 
<% end %> 

<%= link_to 'Back', users_path %> 

S'il vous plaît noter que ce n'est pas une très bonne solution, mais je pense avec cela, vous pouvez commencer à penser

acclamations

sameera

Questions connexes