2010-03-02 7 views
1

Il semble que vous ne puissiez pas utiliser un assistant dans un contrôleur même si les deux appartiennent à la même classe. Par exemple: XYZHelper et XYZController ...Utiliser les aides correctement dans ruby ​​on rails

J'avais l'impression que si le préfixe est le même "XYZ" alors la méthode dans l'assistant peut être utilisée dans le contrôleur et dans la vue, mais je pense que c'est pas le cas.

Alors, comment puis-je supprimer certaines fonctionnalités communes d'un contrôleur et le placer dans un assistant. Je veux placer ce morceau de code dans une aide parce que d'autres contrôleurs peuvent l'utiliser. Quelle est la meilleure façon d'aborder cela?

Merci, Jai.

Répondre

0

Suivre les directives de Pete. Si vous devez toujours exposer les méthodes, procédez comme suit:

Ajoutez les méthodes à ApplicationController classez et enregistrez les méthodes en tant que méthodes auxiliaires en appelant helper_method.

class ApplicationController < ActionController::Base 

    helper_method :foo, :bar 

private 

    def foo 
    "foo" 
    end 

    def bar 
    "bar" 
    end 
end 
+0

Les méthodes seront-elles disponibles pour n'importe quel assistant dans le projet si j'ajoute les méthodes comme méthodes auxiliaires? Merci. – iJK

+0

Oui, si vous ajoutez à 'ApplicationController' il le fera. –

1

Il y a quelques façons dont vous pouvez partager un code entre les contrôleurs:

  1. contrôleur d'application: Si le code en question est une action/méthode qui devrait être dans un contrôleur, mais il pourrait être utilisé par plusieurs contrôleurs (ou tous d'entre eux), alors cela pourrait être un endroit pour le mettre.

  2. le répertoire 'lib'. juste un endroit général pour mettre du code qui devrait être partagé.

  3. Mettez-le dans le modèle. Cela peut ou non être applicable, mais cela vaut la peine de bien regarder le code que vous essayez de déplacer et de penser si c'est quelque chose qui a du sens sur un modèle (au lieu d'un contrôleur ou d'une classe/module aléatoire dans lib) .

+0

Merci pour la réponse pete. Pour une raison quelconque, mettre du code dans le contrôleur d'application semble sale. J'ai une méthode liée à un modèle mais la même méthode devrait être appelable par le contrôleur et une méthode dans l'assistant d'application. – iJK