Указание файла макета для разработки драгоценного камня в рельсах (что это делает?) - PullRequest
1 голос
/ 29 января 2011

Я знаю, как указать файл макета для устройства.Но я не понимаю, как это работает .В частности, в приведенном ниже коде мой layout_name_for_devise используется, если это контроллер устройства.Тогда я решил, что это должно означать, что макет «приложения» будет использоваться, если это НЕ контроллер устройства (который в моем случае находится в app/views/layouts/application.html.haml).Теперь у меня есть другие макеты, например, под названием home.Я думал, что мои взгляды с использованием моего home макета сломаются ... но оказывается, что он работает нормально. Я не понимаю, как это работает.Например, когда выполняется приведенный ниже код, как получается, что мой app/views/layouts/home.html.haml макет по-прежнему вызывается правильно?

class ApplicationController < ActionController::Base
  layout :layout_by_resource

  protected

  def layout_by_resource
    if devise_controller?
      "layout_name_for_devise"
    else
      "application"
    end
  end

1 Ответ

3 голосов
/ 30 января 2011

Хороший ночной отдых творит чудеса для мозга. Поэтому я проснулся, понимая, как это работает ... но также чувствовал себя глупо, потому что не видел этого раньше.

tl; dr - этот код находится внутри контроллера application. Другие контроллеры не вызывают этот код. Вот почему он работает правильно.

Длинный ответ:

Rails пытается найти макеты на основе имени контроллера. Если макета не существует, то рельсы будут использовать макет application.

Итак, в моих Home контроллерах сначала ищется компоновка home. Поскольку он есть, он использует этот макет.

Я не уверен, что делает devise, но он не ищет макет с именем devise, поэтому вместо него используется макет application. И вот тогда код выше работает. Так как контроллер является контроллером устройства, макет затем изменяется на «имя_компоновки_дизайна».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...