2009-10-30 5 views
1

J'ai une méthode song_link qui appelle link_to en interne. Je souhaite que l'appelant puisse passer un hachage d'options à song_link, qui utilisera ensuite les options appropriées et passera le reste à link_to. Voici mon code:Passer sélectivement des options à une autre méthode

def song_link(song, separator = nil, options = {}) 
    if separator.class == Hash 
     options = separator 
     separator = nil # not sure about this logic either! 
         # I guess I should roll it into the options hash 
    end 

    primary_only = false 
    if options[:primary_only] 
     options.delete(:primary_only) 
     primary_only = true 
    end 

    link_to title_with_artists(song, separator, primary_only), song_path(:song_slug => song.song_slug, :artist_slug => song.artist_slug), options 
    end 

Ie, je veux vérifier si options[:primary_only] existe, et si elle ne l'utilise à des fins de song_link sans passer le long de link_to

Il est évident que cette approche ne échelle que j'ajoute plus d'options qui sont pertinentes pour song_link mais pas pour link_to. Comment dois-je faire cela?

Répondre

6

Simplifier l'aide:

def song_link(song, options = {}) 
    separator = options.delete(:separator) 
    primary_only = options.delete(:primary_only) 

    name = title_with_artists(song, separator, primary_only) 
    path = song_path(:song_slug => song.song_slug, :artist_slug => song.artist_slug) 
    link_to name, path, options 
end 

Tirez le meilleur parti du fait que nil est tout aussi bon que false et tout le reste est aussi bon que true.

1

Supprimez toutes les options que vous traitez vous-même du hachage avant de le transmettre.

+0

Donc, fondamentalement, faites ce que je fais? –

+0

C'est soit cela ou passer deux hachages d'options différentes. –

Questions connexes