Я использую другой макет для некоторых действий (в основном для нового действия в большинстве контроллеров).
Мне интересно, каким будет лучший способ указать макет? (Я использую 3 или более разных макетов в одном контроллере)
Я не люблю использовать
render: layout => 'name'
Мне понравилось делать
макет 'name',: only => [: new]
Но я не могу использовать это, чтобы указать 2 или более разных макетов.
Например:
Когда я вызываю компоновку 2 раза в одном и том же контроллере с разными именами компоновки и разными параметрами, первый игнорируется - эти действия не отображаются в указанной компоновке.
Примечание: я использую Rails 2.
ruby-on-rails
mrbrdo
источник
источник
Ответы:
Вы можете использовать метод для установки макета.
источник
layout Proc.new{ ['index', 'new', 'create'].include?(action_name) ? 'some_layout' : 'other_layout' }
Если вы выбираете только между двумя макетами, вы можете использовать
:only
:или
источник
(I am using 3 or more different layouts in the same controller)
. Этот ответ позволяет макет и не макет, не разные макеты.Вы можете указать макет для отдельного действия, используя response_to :
источник
layout "[...]" to the controller class only allows one statement effectively. If you have more than two layouts to deal with (say, admin, generic_app, tailored_app), you will experience
Render и / или Redirect были вызваны несколько раз в ошибках этого действия; и у вас нет выбора, кроме как использовать это предложение.format.html { render 'custom_index', layout: 'application' }
одинаково.Вы также можете указать макет для действия с помощью рендера:
источник
Для этого есть драгоценный камень (layout_by_action) :)
https://github.com/barelyknown/layout_by_action
источник
Различные способы указания макета под контроллером:
В следующем коде макет application_1 вызывается по индексу и показывается действие контроллера Users, а макет приложения (макет по умолчанию) вызывается для других действий.
В следующем коде макет application_1 вызывается для всех действий контроллера Users.
В следующем коде макет application_1 вызывается только для тестового действия контроллеров пользователей, а для всех остальных действий вызывается макет приложения (по умолчанию).
источник
Точность:
Не совсем, но работающий способ СУХОГО - это то, что вы видите выше, но с точностью: макет должен быть после ваших переменных для работы ("@some"). Так как :
И нет :
Если вы делаете before_action ... это тоже не сработает.
Надеюсь, поможет.
источник