ruby-on-rails – rails,如何使用content_tag在helper中构建表?

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – rails,如何使用content_tag在helper中构建表?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在应用程序助手中定义了函数
def display_standard_table(columns,collection = {})    
  content_tag :table do      
    concat content_tag :thead do
      content_tag :tr do
        concat columns.collect { |column| content_tag(:td,column[:display_name]) }
      end
    end      

    concat content_tag :tbody do
      collection.collect { |elem| 
        concat content_tag(:tr,columns.collect { |column|
          content_tag(:td,elem.attributes[column[:name]])
      })
    }
    end
  end
end

我认为这是我的看法:

<%= display_standard_table(
          [
            { :name => 'id',:display_name => 'Id' },{ :name => 'login',:display_name => 'Login' },{ :name => 'first_name',:display_name => 'Name' },{ :name => 'last_name',:display_name => 'LastName' },{ :name => 'email',:display_name => 'Email'}
          ],@users) %>

html中的输出是:

<table><thead></thead><tbody></tbody></table>

应该是:

<table><thead><tr><td>Id</td><td>Login</td>...</tr></thead><tbody><tr>row here</tr></tbody></table>

我不知道什么是失踪. (btw.我使用rails3)

[编辑]

def display_standard_table(columns,collection = {})    
  content_tag(:table) do
    concat(content_tag(:thead) do
      concat(content_tag(:tr) do
        concat(columns.collect { |column| content_tag(:td,column[:display_name]) })
      end)
    end)

    concat(content_tag(:tbody) do
      concat(collection.collect { |elem|
        content_tag(:tr,elem.attributes[column[:name]])
        })
      })
    end)
  end
end

上述版本可以正常工作,但生成的html被转义:/根据content_tag生成的文档字符串应该是html_safe,但是它们被转义了:/

解决方法

def display_standard_table(columns,collection = {})

 thead = content_tag :thead do
   content_tag :tr do
    columns.collect {|column|  concat content_tag(:th,column[:display_name])}.join().html_safe
   end
 end

 tbody = content_tag :tbody do
  collection.collect { |elem|
    content_tag :tr do
      columns.collect { |column|
          concat content_tag(:td,elem.attributes[column[:name]])
      }.to_s.html_safe
    end

  }.join().html_safe
 end

 content_tag :table,thead.concat(tbody)

end

猜你在找的Ruby相关文章