2017-02-22 28 views
0

Я пытаюсь добавить раскрывающееся меню с помощью вспомогательного метода в Rails, но когда у меня была ссылка ul для ссылок в раскрывающемся списке, она обходит мой тег ссылки на раскрывающийся список. .Bootstrap Dropdown Menu on Rails с помощью вспомогательных методов обход ссылки

application_helper.rb

def nav_bar(c='nav nav-pills') 
    content_tag(:ul, class: "#{c}") do 
     yield 
    end 
    end 

    def nav_dropdown(text) 
    html_options = {data: {toggle:"dropdown"}, class:"dropdown-toggle", role:"button", aria:{haspopup:"true", expanded:"false"}} 
    content_tag(:li, role:"presentation", class:"dropdown") do 
     link_to raw(text + content_tag(:span, "",class:"caret") ),"#", html_options 
     nav_bar('dropdown-menu') do yield end 

    end 
    end 

_menu.html.erb

<%= nav_bar do %> 
    ... 

<% if current_user.admin? %> 
    <%= nav_link t('menu.list_companies'), companies_path %> 
    <%= nav_dropdown t('menu.configurations') do %> 
    <%= nav_link t('menu.edit_process_types'), process_types_path %> 
    <% end %> 

<% end %> 

HTML генерируется, когда у меня есть NavBar линию nav_bar('dropdown-menu') do yield end

<li role="presentation" class="dropdown"> 
     <ul class="dropdown-menu"> 
     <li><a data-method="get" href="/process_types"><span class="translation_missing" title="translation missing: pt.menu.edit_process_types"> Edit Process Types</span></a> 
     </li> 
     </ul> 
    </li> 

HTML генерируется, когда я удалить NavBar линию nav_bar('dropdown-menu') do yield end из вспомогательного метода

<li role="presentation" class="dropdown"> 
    <a data-toggle="dropdown" class="dropdown-toggle" role="button" aria-haspopup="true" aria-expanded="false" href="#"> 
    Configurações<span class="caret"></span> 
    </a> 
</li> 

Я хотел достичь:

<li role="presentation" class="dropdown"> 
    <a data-toggle="dropdown" class="dropdown-toggle" role="button" aria-haspopup="true" aria-expanded="false" href="#"> 
    Configurações<span class="caret"></span> 
    </a> 
    <ul class="dropdown-menu"> 
    <li><a data-method="get" href="/process_types"><span class="translation_missing" title="translation missing: pt.menu.edit_process_types"> Edit Process Types</span></a> 
    </li> 
    </ul> 
</li> 

Любые идеи о том, что происходит здесь и как достичь желаемого результата?

ответ

0

Заметил, что content_tag выводит только последнюю строку. Тогда я нашел это: rendering text and html in a block of content_tag, где я увидел возможный способ сделать это.

В конце концов, я изменил application_helper.rb с

def nav_dropdown(text) 

    html_options = {data: {toggle:"dropdown"}, class:"dropdown-toggle", role:"button", aria:{haspopup:"true", expanded:"false"}} 
    content_tag(:li, role:"presentation", class:"dropdown") do 

    link= link_to(raw(text + content_tag(:span, "",class:"caret") ),"#", html_options) 

    nav= nav_bar("dropdown-menu") do 
     yield 
     end 

     link + nav 
    end 

    end 

и, наконец, работал получая желаемый HTML:

<li role="presentation" class="dropdown"> 
    <a data-toggle="dropdown" class="dropdown-toggle" role="button" aria-haspopup="true" aria-expanded="false" href="#"> 
    Configurações <span class="caret"></span> 
    </a> 
    <ul class="dropdown-menu"> 
      <li class="active"><a data-method="get" href="/process_types">Processos Modelo</a> 
      </li> 
    </ul> 
</li>