Nextrp [CPP] RU + Many GEOs Игра на карте России | NEXTRP

Рендеринг одного контроллера с использованием представлений другого контроллера

ruby-on-rails view controller render

36791 просмотра

4 ответа

431 Репутация автора

У меня есть QuestionController Теперь у меня есть AnotherQuestionController с действиями, которые должны отображаться с использованием шаблонов и частичных файлов в app / views / question / Это возможно? Похоже, так и должно быть.

я пробовал

render :template => "question/answer"

но answer.html.erb включает в себя частичные, и я получаю такие ошибки, как

«Отсутствует шаблон another_question / _my_partial.erb в пути просмотра»

Так есть ли способ сказать Rails "обрабатывать AnotherQuestionController как его QuestionController и искать представления и частичные значения в app / views / question"? Или мне придется создать app / views / another_question - что приведет к дублированию (это не может быть способом Rails).

Спасибо

Автор: Paul Источник Размещён: 18.06.2009 02:55

Ответы (4)


50 плюса

12281 Репутация автора

Визуализация шаблона должна действительно работать

 render :template => "question/answer"

Проблема, с которой вы столкнулись, связана с тем, что частичные лица смотрят не туда. Исправление простое, просто сделайте ваши частичные абсолютными в любых общих шаблонах. Например, вопрос / answer.html.erb должен иметь

<%= render :partial => 'question/some_partial' %>

а не обычный

<%= render :partial => 'some_partial' %> 
Автор: Ben Hughes Размещён: 18.06.2009 02:58

0 плюса

28820 Репутация автора

Вы можете попробовать плагин inherit_views ( http://github.com/ianwhite/inherit_views/tree/master ), который я упомянул здесь в ответе на этот вопрос .

Автор: Shadwell Размещён: 18.06.2009 03:07

12 плюса

12557 Репутация автора

Вы можете достичь этого с помощью:

render 'question/answer'
Автор: klew Размещён: 18.06.2009 03:13

0 плюса

3333 Репутация автора

Rails использует список префиксов для разрешения шаблонов и партиалов. Хотя вы можете явно указать префикс («вопрос / ответ»), как предлагается в другом ответе, этот подход потерпит неудачу, если сам шаблон включает в себя неквалифицированные ссылки на другие компоненты.

Предполагая, что у вас есть суперкласс ApplicationController, и QuestionController наследует его, то места, где Rails будет искать шаблоны, по порядку, «app / views / question /» и «app / views / application /». (На самом деле, он также будет выглядеть в виде последовательности путей просмотра, но для простоты я приукрашиваю это.)

Учитывая следующее:

class QuestionController < ApplicationController
end

class AnotherQuestionController < ApplicationController
end

QuestionController._prefixes
# => ["question", "application"]
AnotherQuestionController._prefixes
# => ["another_question", "application"]

Решение № 1. Поместите частичное в «app / views / application /» вместо «app / views / question /», где оно будет доступно обоим контроллерам.

Решение № 2. Наследовать от QuestionController, если это необходимо.

class AnotherQuestionController < QuestionController
end
=> nil
AnotherQuestionController._prefixes
# => ["another_question", "question", "application"]

Решение № 3. Определите метод класса AnotherQuestionController :: local_prefixes

Это было добавлено в Rails 4.2.

class AnotherQuestionController < ApplicationController
  def self.local_prefixes
    super + ['question']
  end
end
AnotherQuestionController._prefixes
# => ["another_question", "question", "application"]
Автор: Steve Размещён: 03.01.2019 05:58
Вопросы из категории :
32x32