реализация select_layout Ruby метапрограммирование - PullRequest
0 голосов
/ 21 июня 2011

Как реализовать метод "select_layout", чтобы я мог преобразовать этот код:

class Cpu::ContextsController < Cpu::ApplicationController

  layout :select_layout

  private

  def has_resource?
    true # dummy
  end

  def select_layout
    has_resource? ? 'cpu/context' : 'cpu/account'
  end
end

в

class Cpu::ContextsController < Cpu::ApplicationController
  select_layout do
    has_resource? ? 'cpu/context' : 'cpu/account'
  end
end

ОБНОВЛЕНИЕ: приведенное ниже решение достаточно хорошо;)

  before_filter do
    self.class.send(:layout, has_resource? ? 'cpu/context' : 'cpu/account')
  end

Ответы [ 2 ]

1 голос
/ 22 июня 2011

Используйте render ..., :layout => has_resource? ? "cpu/context" : "cpu/account", если вы хотите изменить макет на лету, layout - это метод класса и используется для указания макета для набора методов.

0 голосов
/ 21 июня 2011

Не удается найти has_resource, поскольку has_resource определен как метод экземпляра, а метод select_layout определен как метод класса.

...