【问题标题】:Helper method rendering only the last link of a listHelper 方法仅呈现列表的最后一个链接
【发布时间】:2014-09-09 06:09:56
【问题描述】:

我有这个辅助方法:

  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 --

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

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

我做错了什么?为了让辅助方法渲染所有链接,我需要进行哪些更改?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 helper ruby-2.1


    【解决方案1】:

    这是因为在 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
    

    【讨论】:

    • 谢谢你,知识渊博!但是,do/end 运算符将整个数组呈现为单个列表项。我做了一个笨拙的解决方法,在数组中的链接之间添加列表标签,如下所示: "
    • " ,link_to("New LLC" , new_llc_path) ,"
    • ", "
    • " , link_to( "新 C 公司" , new_ccompany_path), "
    • ",
  • @HristoGeorgiev 我已经更新了我的答案,将每个链接都包含在
  • 中。希望这有点清洁
  • 猜你喜欢
    相关资源
    最近更新 更多
    热门标签