2017-02-22 1 views
0

Railsでヘルパーメソッドを使用してドロップダウンメニューを追加しようとしていますが、ドロップダウン内のリンクに対してulを持っていたら、私は、ナビゲーションバーラインnav_bar('dropdown-menu') do yield endヘルパーメソッドがリンクをバイパスしているヘルパーメソッドのブートストラップドロップダウンメニュー

を持っていたときに発生する。

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私はヘルパーメソッドからナビゲーションバーライン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が

<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、私はこれを行う可能な方法を見ました。

は最後に、私は

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 

でapplication_helper.rbを変更し、それが最終的に所望の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> 
関連する問題