Rails 3 - Пользовательский помощник link_to (с классом по умолчанию и возможностью добавления классов) - PullRequest
4 голосов
/ 23 декабря 2011

Я пытаюсь подключить пользовательский помощник, который имеет класс по умолчанию 'pjax', но также сохраняет возможность добавлять классы, где это необходимо.

Пример:

link_to_pjax('pagename', page_path, :class => 'current')

Таким образом, помощник по умолчанию добавил бы 'pjax', а также класс 'current' или что-то еще.

def link_to_pjax(name, path, options = {:class => 'pjax'})
    link_to(name, path, options)
end

Синтаксис меня бесит.Любые советы будут высоко ценится.

Ответы [ 3 ]

6 голосов
/ 23 декабря 2011
def link_to_pjax(name, path, options)
  options[:class] += ' pjax'
  link_to(name, path, options)
end

edit

После теста это гораздо менее элегантно:

 def link_to_pjax(name, path, options = {})
   options[:class] ? options[:class] += ' pjax' : options[:class] = 'pjax'
   link_to(name, path, options)
 end

Мое первое решение работает, но только если вы все еще указали класс.

Последние версии работают во всех случаях:

  • link_to_pjax 'click me', my_super_path, класс: 'ahah', id: 'hello'
  • link_to_pjax 'clickя, my_super_path
  • и т. д.

Мой плохой ...

1 голос
/ 23 декабря 2011
def link_to_pjax(name, path, options={})
  default_options = { :class => "pjax" }
  link_to(name, path, options.merge(default_options))
end
0 голосов
/ 16 июля 2012

Я улучшил ответ Delba для обработки блочной версии link_to:

def link_to_pjax(*args, &block)
  if block_given?
    options      = args.first || {}
    html_options = args.second
    link_to_pjax(capture(&block), options, html_options)
  else
    name         = args[0]
    options      = args[1] || {}
    html_options = args[2] || {}
    html_options[:class] ? html_options[:class] += ' pjax' : html_options[:class] = 'pjax'
    link_to(name, options, html_options)
  end
end
...