2010-05-20 7 views
2

Existe-t-il un moyen pratique de passer des paramètres aux méthodes mixtes?Ruby Mixins et variables d'instance

La classe utilisant mixin peut définir des variables d'instance auxquelles les méthodes mixtes s'attendent, ou transmettre tous les paramètres nécessaires en tant qu'arguments aux méthodes mixtes. En arrière-plan, nous avons un contrôleur Rails qui publie du contenu, mais d'autres contrôleurs et même des modèles doivent pouvoir "agir en tant qu'éditeurs", donc je factorise les méthodes des contrôleurs dans un module que je Mélanger au besoin.

Ici, par exemple, est le code d'un contrôleur Rails qui doit « agir comme éditeur » et il appelle un mixte dans la méthode question_xhtml() ...

def preview 
    @person = Person.find params[:id] 
    @group = Group.find params[:parent_id] 
    @div = Division.find params[:div_id] 
    @format = 'xhtml' 
    @current_login = current_login 
    xhtml = person_xhtml() # CALL TO MIXED-IN METHOD 
    render :layout => false 
end 

En fin de compte question_xhtml a besoin de tout ce genre de choses ! Cette approche est-elle raisonnable ou serait-elle préférable?

def preview 
    person = Person.find params[:id] 
    group = Group.find params[:parent_id] 
    div = Division.find params[:div_id] 
    format = 'xhtml' 
    xhtml = person_xhtml(person, group, div, format) # CALL TO MIXED-IN METHOD 
    render :layout => false 
end 

... ou autre chose?

+0

Pouvez-vous donner un exemple des méthodes utilisées et des paramètres dont elles ont besoin? – mikej

Répondre

0

Je pense que vous devriez être en mesure de le faire:

module ActAsPublisher 
    def person_xhtml 
    do_stuff_with(@person, @group, @div, @format, @current_login) 
    # eg. use instance variable directly in the module 
    end 
end 

class WhateverController < Application Controller 
    act_as_publisher 
    ... 
end 

si vous avez utilisé le script/generate plug-in act_as_publisher.

+0

Merci, mais ma question vise vraiment à comprendre la meilleure approche (s'il y en a une) entre le paramétrage des variables d'instance qu'un plugin utilisera, et le passage explicite d'arguments aux méthodes plugin. – Harv