-
-
Save phinze/122321 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# What is worse? | |
<%= f.table "Bill Dates", @bill_dates do |t| | |
t.date | |
t.billed? | |
end %> | |
# Or | |
<% f.table "Bill Dates", @bill_dates do |t| %> | |
<%= t.add_field(:date) %> | |
<%= t.billed? %> | |
<% end %> | |
# Why can't we | |
<% f.table "Bill Dates", @bill_dates do |t| %> | |
<%= t.date %> | |
<%= t.billed? %> | |
<% end %> | |
def table(title, collection, &block) | |
rowcatcher = Class.new() | |
rowcatcher.class_eval do | |
attr_accessor :fields | |
def initialize | |
@fields = [] | |
end | |
collection.first.class.columns do |c| | |
define_method(c.name) { @fields << c.name } | |
end | |
end | |
rc = rowcatcher.new | |
yield rc | |
xhtml = ctag(:tr) do | |
collection.each do |c| | |
rc.fields.each do |f| | |
ctag(:td c.send(f))) | |
end | |
end | |
end | |
concat(xhtml) | |
end | |
<% uiris_form_for :animal_orders, :no_form_tag => true do |f| %> | |
<% f.table(@collection) do |t| %> | |
<%= t.column(:bar) { |row, _| number_to_crazy_format(val) } %> | |
<%= t.column(:baz, :header => "Baz Baz") %> | |
<%= t.column(:qux_id, :sort => true) { |_, val| f.object.orders.find(val).title } %> | |
<%= t.column(:quux) %> | |
<% end %> | |
<%# | |
def table(method_or_collection, options, &block) | |
collection = method_or_collection.is_a?(Symbol) ? try_to_call(method_or_collection) \ | |
: method_or_collection | |
rowcatcher = Class.new() | |
rowcatcher.class_eval do | |
attr_accessor :columns | |
def initialize | |
@columns = [] | |
end | |
def column(method, options, &block) | |
col = { | |
:method => method, | |
:options => options.dup, | |
:lambda => block | |
} | |
@columns << col | |
end | |
end | |
rc = rowcatcher.new | |
yield rc | |
# Headers | |
xhtml = ctag(:tr) do | |
end | |
# Rows | |
xhtml = ctag(:tr) do | |
collection.each do |c| | |
rc.fields.each do |f| | |
ctag(:td c.send(f))) | |
end | |
end | |
end | |
concat(ctag(:table, xhtml)) | |
end | |
%> | |
<% f.table(nil, list_orders, :paginate_prefix => prefix) do |table| %> | |
<% table.show(:header => false, :send => false) do |c| %> | |
<%= link_to 'Show', c %> | |
<% end %> | |
<% table.edit(:header => false, :send => false) do |c| %> | |
<%= link_to 'Edit', edit_animal_order_path(c) %> | |
<% end %> | |
<% if local_assigns.has_key?(:include_destroy_link) && include_destroy_link == true %> | |
<% table.delete(:header => false, :send => false) do |order| %> | |
<%= link_to 'Delete', order, :method => :delete, :confirm => "Are you sure you want to delete this order?" %> | |
<% end %> | |
<% end %> | |
<% if local_assigns.has_key?(:include_template_link) && include_template_link == true %> | |
<% table.new_from_template(:header => false, :send => false) do |order| %> | |
<%= link_to 'New from Template', new_animal_order_path(:template_id => order.id) %> | |
<% end %> | |
<% end %> | |
<% table.account_number :send => false, :sort => false do |order| %> | |
<%=h order.account.account_number unless order.account.nil? %> | |
<% end %> | |
<% table.pi_species_specs :send => false, :sort => false do |order| %> | |
<%=h order.pi.display_name unless order.pi.nil? %><br /> | |
<%=h order.species.accounting_code unless order.species.nil? %> <%=h order.requested_sex %> <%=h order.requested_age %> <%=h order.requested_weight %> | |
<% end %> | |
<% table.arrival_date :send => false, :sort => false do |order| %> | |
<%=h order.asap? ? "ASAP" : order.arrival_date.strftime("%m/%d/%y") %> | |
<% end %> | |
<% table.quantity %> | |
<% table.vendor_name :send => false, :sort => false do |order| %> | |
<%=h order.vendor.name unless order.vendor.nil? %> | |
<% end %> | |
<% table.ordering_user :send => false, :sort => false do |order| %> | |
<%=h order.ordering_user.display_name unless order.ordering_user.nil? %> | |
<% end %> | |
<% table.location :send => false, :sort => false do |order| %> | |
<%=h order.location.building unless order.location.nil? %> <%=h order.location.room unless order.location.nil? %> | |
<% end %> | |
<% end %> | |
<% end %> | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment