0

我有这个辅助方法:

  def pick_index_paths_new



 case params[:type]
     when 'eood', 'ood'
     content_tag :li , :class => 'link_list' do
       link_to "New EOOD", new_eood_path 
       link_to "New OOD" , new_ood_path 
      end
     when 'llc' , 'ccompany' , 'scompany'
      content_tag :li, :class => 'link_list' do
        link_to "New LLC" , new_llc_path
        link_to "New C Company" , new_ccompany_path
        link_to "New S Company" , new_scompany_path
       end
     else link_to "New" , new_resource_path , :data => { :no_turbolink => true } 
 end

结尾

这是我在视图中的外观:

 <div class="row">
<div class="container">
  <ul class="tabs">
     <%= pick_index_paths_new %> 
  </ul>
  <table class='table'>
      <thead>
        <tr>
  !-- some other stuff --

当我加载我的页面时,只有最后一个链接可见(“新 OOD”或新 SCompany“)。

我尝试将所有逻辑放在我的视图中,并且它在那里正常工作(但它完全令人毛骨悚然)

我究竟做错了什么?我必须更改什么才能让辅助方法呈现所有链接?

4

1 回答 1

2

这是因为在 ruby​​ 中,方法中的最后一次调用是隐式返回的。你content_tag用一个块调用,然后调用它里面的多个东西。最后一次调用将用作隐式返回值。要显示所有链接,您可以建立一个链接数组,然后加入它们(我也认为您需要调用html_safe),这是content_tag.

def pick_index_paths_new
  [].tap do |array|
    case params[:type]
      when 'eood', 'ood'
        array << link_to("New EOOD", new_eood_path)
        array << link_to("New OOD" , new_ood_path) 
      when 'llc' , 'ccompany' , 'scompany'
        array << link_to("New LLC" , new_llc_path)
        array << link_to("New C Company" , new_ccompany_path)
        array << link_to("New S Company" , new_scompany_path)
    else 
      array << link_to("New" , new_resource_path , data: { no_turbolink: true })
    end
  end.map do |link|
    content_tag :li, link, class: 'link_list'
  end.join.html_safe
end
于 2014-07-18T07:25:16.573 回答