Table Cloth gives you an easy to use DSL for creating and rendering tables in rails. It's new, so if you want a feature or have an improvement? Make an issue!
Follow me! @robertoross
Add this line to your application's Gemfile:
gem 'table_cloth'
And then execute:
$ bundle
Table Cloth can use defined tables in app/tables or you can build them on the fly.
Table models can be generated using rails generators.
$ rails g table User
It will make this:
class UserTable < TableCloth::Base
# Define columns with the #column method
# column :name, :email
# Columns can be provided a block
#
# column :name do |object|
# object.downcase
# end
#
# Columns can also have conditionals if you want.
# The conditions are checked against the table's methods.
# As a convience, the table has a #view method which will return the current view context.
# This gives you access to current user, params, etc...
#
# column :email, if: :admin?
#
# def admin?
# view.current_user.admin?
# end
#
# Actions give you the ability to create a column for any actions you'd like to provide.
# Pass a block with an arity of 2, (object, view context).
# You can add as many actions as you want.
#
# action {|object, view| view.link_to "Edit", edit_object_path(object) }
end
Go ahead and modify it to suit your needs, pick the columns, conditions, actions, etc...
In your view, you would then use this code:
<%= simple_table_for @users, with: UserTable %>
The second approach to making tables with Table Cloth is in the view.
<%= simple_table_for @users do |t| %>
<% t.column :name %>
<% t.column :email %>
<% t.action {|user| link_to "View", user %>
<% end %>
You can create your own column by making a class that responds to .value(object, view)
class ImageColumn < TableCloth::Column
def value(object, view)
view.raw(view.image_tag(object.image_url))
end
end
In your table
<%= simple_table_for @users do |table| %>
<% table.column :name %>
<% table.column :image, using: ImageColumn %>
<% end %>
A lot of tables have an actions column to give you the full CRUD effect. They can be painful but Table Cloth incorporates a way to easily add them to your definition.
class UserTable < TableCloth::Base
column :name
action {|object, view| view.link_to 'View', object }
action(if: :admin?) {|object, view| view.link_to 'Delete', object, method: :delete }
def admin?
view.current_user.admin?
end
end
Create an initializer called table_cloth.rb
Configuration looks like this:
TableCloth::Configuration.configure do |config|
config.table.class = 'table table-bordered'
config.thead.class = ''
config.tbody.class = ''
config.tr.class =''
config.th.class =''
config.td.class =''
end
You can also configure specific tables separately.
class TableCloth::Base
column :name, :email
action(:edit) {|object, view| view.link_to "Edit", edit_object_path(object) }
config.table.class = ''
config.thead.class = ''
config.th.class = ''
config.tbody.class = ''
config.tr.class = ''
config.td.class = ''
end
You can set any value on table element configurations. For example:
config.table.cellpadding = 1
config.td.valign = 'top'
- TableCloth was built during my open source time at philosophie
- simple_form for the idea of
simple_table_for
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - CREATE A SPEC.
- Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request