Есть ли способ отобразить «супер» вид движка в переопределенном виде основного приложения?

Я разрабатываю движок с контроллером и представлениями, но я хочу разрешить переопределение представлений (это достаточно просто, поскольку Rails::Engine позволяет это делать, автоматически добавляя app/views из основного приложения к пути представления для движка ). Однако я хочу, чтобы переопределенное представление могло ссылаться на представление из движка — например, я хочу «обернуть» представление движка пользовательскими элементами в своем приложении:

# main_app/app/views/engine/template.haml

# ... custom stuff here
= render template: 'engine/template'
# ... custom stuff here

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


person Daniel Vandersluis    schedule 01.10.2013    source источник
comment
Будет ли работать render template: "#{YourEngine::Engine.root}/engine/template"? его можно обернуть в помощник, например super_view, который возвращает путь к файлу представления для движка.   -  person tihom    schedule 02.10.2013
comment
@tihom не работает, выдает: Missing template /path/to/engine/engine/template   -  person Daniel Vandersluis    schedule 02.10.2013
comment
он должен быть render file: ..., а путь к файлу изменен, чтобы он представлял полный путь к файлу шаблона, например, может потребоваться добавить app/views   -  person tihom    schedule 02.10.2013
comment
Хорошо, это действительно работает (я также добавил app/views в путь). Не особенно дружелюбно, но для начала. Вы должны добавить его как ответ вместо комментария.   -  person Daniel Vandersluis    schedule 02.10.2013
comment
немного изменено, чтобы использовать имя файла само по себе   -  person tihom    schedule 02.10.2013


Ответы (1)


Попробуйте отрендерить файл, указав полный путь к файлу шаблона движка.

  # in view
  <%= engine_view {|f| render file: f} %>

  # in helper
  def engine_view(&b)
     yield eval("__FILE__.gsub(Rails.root.to_s, YourEngine::Engine.root.to_s)",b.binding) 
  end
person tihom    schedule 01.10.2013