Define Columns allows you to manipulate the content columns of your ActiveRecord model.
-
Add virtual attributes as columns
-
Hiding existing content columns
-
Changes the output of the column
-
Allows you to place your logic in the model instead of the view.
-
Does not assume your table markup. You have full flexibility to change things
-
No need to hand write the table columns for virtual attributes
$ gem install define_columns
# Person has content_columns [ "name", "address", "gender", "hobbies" ] # Note that the names must be an exact match class Person < ActiveRecord::Base define_columns do |columns| columns.hide %w(name) # takes in an array of column names columns.add %w(favourite_color) # can add virtual attributes as columns columns.show(:gender) do |gender| # returns "-Male-" for column.show(person) "-#{gender}-" end end def favourite_color red end end # Person.table_columns returns [ "address", "gender", "hobbies", "favourite_color" ] # In your view(in haml) %table %thead %tr - Person.table_columns.each do |column| %th= column.header - @persons.each do |person| %tbody
- Person.table_columns.each do |column|
%td= column.show(person)
The show block takes in an argument and a block.
columns.show(:gender) do |gender| "-#{gender}-" end
The argument :gender must match the column name. The block parameter ‘gender’ is equivalent to the result of @person.gender.
Not having a show block renders @person.gender
Copyright © 2010 Wong Liang Zan. See LICENSE for details.