2009-10-30 50 views
1

我有一个方法song_link,它在内部调用link_to。我希望调用者能够将选项散列传递给song_link,然后将使用与其相关的选项,并将其余部分传递给link_to。这里是我的代码:选择性地将选项传递给另一个方法

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 

也就是说,我要检查一下options[:primary_only]是否存在,如果它不将其用于song_link的目的,而无需将其传递到link_to

显然,这种做法不会因为我添加了更多与song_link相关的选项,但不包含link_to。我应该怎么做?

回答

6

简化帮手:

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 

采取的事实nil是一样false的好,其他一切都是为true良好的优势。

1

在传递它之前,从散列中删除处理自己的任何选项。

+0

那么基本上做我在做什么? – 2009-10-30 02:38:10

+0

这是要么通过两个不同的选项哈希。 – 2009-10-30 03:44:59

相关问题