Выборочно передать параметры другому методу - PullRequest
1 голос
/ 30 октября 2009

У меня есть метод 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. Как мне это сделать?

Ответы [ 2 ]

6 голосов
/ 30 октября 2009

Упрощение помощника:

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 голос
/ 30 октября 2009

Удалите все параметры, которые вы обрабатываете из хэша, прежде чем передать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...