选择性地将选项传递给另一个方法

Tom*_*man 1 ruby ruby-on-rails

我有一个内部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
Run Code Online (Sandbox Code Playgroud)

也就是说,我想检查一下是否options[:primary_only]存在,以及是否确实将其用于其song_link目的而不将其传递给link_to

显然,这种方法不会扩展,因为我添加了更多与之相关song_link但不适用的选项link_to.我该怎么做?

Rya*_*ary 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
Run Code Online (Sandbox Code Playgroud)

充分利用与其他一切一样nil好的事实.falsetrue