如何编写帮助方法以在选项卡中显示集合

时间:2013-12-20 14:42:38

标签: ruby-on-rails ruby twitter-bootstrap helper

我想添加帮助程序以在标签中显示我的任务。

module Users::TasksHelper
  include ActionView::Helpers::UrlHelper

  def present_in_tabs collection
    content_tag :div, class: "tabbable tabs-left" do
      content_tag :ul, class: 'nav nav-tabs' do
        collection.collect do |item|
          content_tag :li do
            link_to "Zadanie #{1}", "#task-#{item.id}", data: { toggle: 'tab' }
          end
        end.join.html_safe
      end

      content_tag :div, class: 'tab-content' do
        collection.collect do |item|
          content_tag :div, class: 'tab-pane' do
            concat content_tag :h3 do
              item.name
            end
            content_tag :p do
              item.description
            end
          end
        end.join.html_safe
      end
    end
  end
end

这是我想要转换为辅助方法

.tabbable.tabs-left
  %ul.nav.nav-tabs
    - @related_tasks.each_with_index do |task, i|
      %li{class: if task == @current_task then 'active' end}
        = link_to "Zadanie #{i+1}", "#task-#{task.id}", data: { toggle: 'tab' }

  .tab-content
    - @related_tasks.each do |task|
      .tab-pane{id: "task-#{task.id}", class: if task == @current_task then 'active' end}
        %h3= task.name
        %p
          = task.description

1 个答案:

答案 0 :(得分:1)

我认为这个问题相当简单:

        concat content_tag :h3 do
          item.name
        end
        content_tag :p do
          item.description
        end

您正在混合concat和返回值。您需要确保使用concat或从帮助程序返回一个字符串。请查看文档:{​​{3}}

因此,与<%= %>一起使用的帮助者需要创建一个html_safe字符串,而concat内的<% %>也可以使用帮助器。

更好的解决方案是使用部分,如@cenyongh指出。