ruby-on-rails - rails,如何使用content_tag在助手中建立表?

标签 ruby-on-rails ruby-on-rails-3

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

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)

[编辑]

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,但是它们被转义了:

最佳答案

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-on-rails - rails,如何使用content_tag在助手中建立表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3863844/

相关文章:

javascript - Ruby on Rails 将值重置为空

ruby-on-rails - 当 guard-rspec 与 spork 一起使用时没有通知

ruby-on-rails-3 - rails 3 activerecord order - 什么是正确的sql注入(inject)工作?

ruby-on-rails - 如何从同一操作将不同链接上的不同数据传递到同一 View ?

ruby-on-rails - 有没有办法让我只有 Action 而没有 View

ruby-on-rails - Rails 7 Bootstrap 警报未被消除

ruby-on-rails - 如何使用变量访问 erb 中 ruby​​ 对象的字段名?前任。模型.task_#{变量}

javascript - capybara 与 :js => true causes tests to fail

ruby-on-rails - Rails 市场支付处理

ruby-on-rails-3 - Rails 3.0 :cancan roles defined in user. 博客应用程序的 rb