Хотите СУШИТЬ этот код, но есть проблемы - PullRequest
1 голос
/ 25 января 2012

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

#test if the current selected language is the one that was clicked in the menu
def link_to_without_class_unless_current_language(language)
  if language_selected?(language)
    content_tag(:li, content_tag(:span, content_tag(:em, language)), :class => "current")
  else
    content_tag :li, link_to(content_tag(:span, language), :locale => language.prefix)
  end
end


#tests if the current page is the same as that for the link
def link_to_without_class_unless_current(name, options)
  if current_page?(options[:url])
    content_tag(:li, content_tag(:span, content_tag(:em, name)), 
                :class => options[:class] ||= "current")
  else
    content_tag :li, link_to(content_tag(:span, name), options[:url])
  end
end

В представлении:

<%= link_to_without_class_unless_current_language 'English'  %> |
<%= link_to_without_class_unless_current_language 'Français' %>

<%= link_to_without_class_unless_current t('application.menu_links.home'), 
                                         { :url => root_url } %>

1 Ответ

1 голос
/ 26 января 2012

Могу ли я предложить вам вместо этого просто передать коллекцию опций, точно так же, как ваш второй параметр во втором методе, где вы проверяете, установлены ли опции [: url], вы можете проверить, установлены ли опции [: language], а затем выполнитькод в коде вашего первого метода, в противном случае, если задана опция [: url], выполнить код второго метода, вы также можете предложить вариант: name.

, чтобы ваши 3 вызова выглядели так

<%= link_to_without_class_unless_current :language => 'English'  %> |
<%= link_to_without_class_unless_current :language => 'Français' %>

<%= link_to_without_class_unless_current :name => t('application.menu_links.home'), 
                                         :url => root_url  %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...