rails,如何使用 content_tag 在助手中构建表? [英] rails, How to build table in helper using content_tag?

查看:39
本文介绍了rails,如何使用 content_tag 在助手中构建表?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在应用程序助手中定义了函数:

I defined function in application 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>

我无法弄清楚缺少什么.(顺便说一句.我正在使用 rails3)

and i can't figure out what's missing. (btw. I'm using 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, columns.collect { |column|
          content_tag(:td, elem.attributes[column[:name]])
        })
      })
    end)
  end
end

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

The above version works ok but generated html is escaped :/ according to documentation strings produced by content_tag should be html_safe, but they're escaped :/

推荐答案

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

这篇关于rails,如何使用 content_tag 在助手中构建表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆