Rails получает частичный вид через URL браузера - PullRequest
3 голосов
/ 18 февраля 2010

У меня есть некоторый javascript, который должен загрузить партию рельсов - я бы предпочел не повторять HTML партиала в файле javascript.

Есть ли способ сделать эту партию доступной через браузерurl, чтобы JS мог загрузить его?

частичное расположение:

shared/_search.html.erb

Я хотел бы получить представление HTML следующим образом:

example.com/shared/search.html

Могу ли я явно маршрутизировать это или захватить его локально через файловую систему?

Я не хочу создавать контроллер только для рендеринга этого частичного для JS.

Ответы [ 2 ]

2 голосов
/ 18 февраля 2010

Вам не нужно создавать новый файл контроллера. Но вам нужно действие, чтобы ответить на входящий запрос от вашего JS.

Это действие может отображать частичное, если хотите. Вы также можете обобщить действие, попросив JS указать партиал по имени в качестве одного из параметров действия.

Если проблема в том, что вам нужно быстро обслужить миллион входящих вызовов, и вам не нужен механизм ActiveController (вы не хотите создавать экземпляр контроллера для запроса), вы можете использовать Rails Metal - http://railscasts.com/episodes/150-rails-metal

Добавлено: еще один вариант - сохранить файл шаблона на вашем сервере (в общедоступных / assets и т. Д.). Тогда:

  1. JS получает шаблон один раз за загрузку страницы
  2. JS вызывает рельсы с параметрами, чтобы получить только ответ (без разметки)
  3. JS, локально в браузере, объединяет ответ в шаблон. Либо шаг за шагом, либо с помощью JS-библиотеки, такой как Jaml
  4. Повторите шаги 2-3 до бесконечности
1 голос
/ 18 февраля 2010

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

Метод render содержит ряд параметров для представления содержимого - вы можете напрямую загрузить файл или даже сгенерировать встроенный текст, который будет возвращен в результате вызова действия.

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