3Май/110
Keep views simple
Some times you need complex logic in views to filter some fields from unregistered users and show default message for blank fields. This case instead of tons if statements you can use nifty helpers with the power of ruby blocks. Like this:
def hide_field(object, field = nil, &block)
if current_user # can? :read_fields, object # for cancan fans
block_given? ? yield : object.send(field.to_sym)
else
'hidden'
end
end
def stub_blank(object, &block)
if object.present?
block_given? ? yield : object
else
'not set'
end
end
if current_user # can? :read_fields, object # for cancan fans
block_given? ? yield : object.send(field.to_sym)
else
'hidden'
end
end
def stub_blank(object, &block)
if object.present?
block_given? ? yield : object
else
'not set'
end
end
And now in your views you can use it like this:
hide_field order, :contact_name
hide_field(order) { order.company.name }
stub_blank(order.employees_num)
stub_blank(order.employees_num) { I18n.t(:employee, :count => order.employees_num) }
hide_field(order) { stub_blank order.contact_name }
hide_field(order) { order.company.name }
stub_blank(order.employees_num)
stub_blank(order.employees_num) { I18n.t(:employee, :count => order.employees_num) }
hide_field(order) { stub_blank order.contact_name }
This small trick can save many lines of code in your views. Enjoy!
Комментарии (0)
Пинги (0)
(подписаться на новые комментарии в этой ветке)
Нет обратных ссылок на эту запись.
Leave a comment