Условные макеты Rails: почему «: for» работает как опция для метода макетов? - PullRequest
3 голосов
/ 03 января 2012

В моем контроллере я использую layout 'application', :only => :edit

Но я заметил, что layout 'application', :for => :edit также работает.

Просто любопытно, потому что в документах упоминается только :only & :except.Я не могу явно найти :for в любых документах для метода layout.

Rails v2.3 - макет (railsapi.com)

Rails v3.1 - макет (apidock.com)

1 Ответ

9 голосов
/ 04 января 2012

Как я уже говорил выше, Rails игнорирует ваш параметр: for и должен просто использовать макет 'application' для всех действий.

Что касается рендеринга нескольких макетов, кажется, что вы можете иметь только одну layout ... строку для вашего контроллера; если у вас есть кратные, он будет использовать только последний. И если последний имеет параметр :only или :except, он должен вернуться к макету application для всех других действий. Если он неправильно использует макет application и рендеринг без какого-либо макета, убедитесь, что предыдущий разработчик не поместил что-то вроде layout nil где-то в вашем контроллере / приложении.

Если вы хотите обрабатывать несколько макетов внутри вашего контроллера, вы также можете попробовать это:

class UsersController < ApplicationController
  layout :choose_layout

  def choose_layout
    if action_name == "edit"
      "application"
    else
      "login"
    end
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...