почему это вызывает: show, чтобы вообще не получать макет: layout 'admin',: кроме => [: show] - PullRequest
2 голосов
/ 03 октября 2011

почему это вызывает: show, чтобы вообще не получать макет: layout 'admin',: кроме => [: show]

Это предполагаемое поведение?Я вынужден поместить рендер: layout => 'application' в другом пустом конце def show.

Разве действие show по умолчанию не должно соответствовать базовому макету?

1 Ответ

2 голосов
/ 03 октября 2011

Это на самом деле меня немного удивило, и мне пришлось проверить источник. Ответ - нет, по умолчанию он не должен соответствовать макету приложения. Вместо этого переданные условия используются для определения, имеет ли действие макет для всех , отсюда и имя смешанного метода action_has_layout? (Rails 3).

Я бы наполовину ожидал, что он будет вести себя как respond_to, который можно вызывать несколько раз, чтобы создать условия для различных действий.

В любом случае вы можете легко справиться с этим, отправив метод в layout, содержащий вашу логику (через метод proc или метод ссылки на символы), вместо того, чтобы определять пустое действие просто для визуализации другого макета.

Например:

layout :determine_layout

...

def determine_layout
  # show gets application, the rest get admin
  params[:action] == 'show' ? 'application' : 'admin'

  # or, returning true would probably do it (and be more flexible in case 
  # the rest of your app swapped layouts to something other than application)
  params[:action] == 'show' || 'admin'
end
...