Devmen Blog entries

Keep views simple

Pavel Chipiga, 15 Jun 06:50

Pavel Chipiga
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
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 }
This small trick can save many lines of code in your views. Enjoy!

Comments