0

我正在尝试创建一个辅助方法来大量干燥我的视图,这实际上会为我呈现一个表格。到目前为止,我希望使用的语法是:

 = table_for @notes do

  = column "Date" do
    = time_ago(note.created_at)

  = column "Content" do
    = note.content

这是我到目前为止的助手:

module TableHelper

    def table_for(items)
        @resource = items.singularize # Singularizes the resource
        @columns = []

        yield
        # Create a table
        content_tag :table, class: 'table table-striped' do
            thead + tbody(items)
        end
    end

    def thead # Loop through columns and print column label
        content_tag :thead do
            content_tag :tr do 
                 @columns.each do |c|
                 concat(content_tag(:th, c[:label]))
                 end
            end
        end
    end

    def tbody(items) # This bit fails :(
  content_tag :tbody do
    items.each { |e|
     concat(content_tag(:tr){
        @columns.each { |c|
          e[c[:label]] = c[:block].call(e[c[:label]]) if c[:block]
          concat(content_tag(:td, e[c[:block]]))
        }
      })
    }
  end
end

    def column (label, &block) # Takes a label and block, appending it to the columns instance
        @columns << { label: label, block: block}
        nil # Stops it printing the @columns variable
    end
end

这不足之处在于 tbody 方法。我不知道如何将奇异资源传递给块。

例如,在这种情况下,我将 @notes 作为集合传递。然后在列块中调用 note.created_at。但是,没有定义“注释”。

任何帮助将不胜感激!

4

1 回答 1

0

可能你需要更换

= table_for @notes do` 

经过

= table_for @notes do |note|

table_for当你让步时,你应该从函数中执行yield item. 这itemitems数组的一个实例。所以也需要准备。

编辑:此链接有不同的方法:https ://stackoverflow.com/a/11483295/1160106

于 2012-09-04T10:01:12.587 回答