Rails: генерация URL для действий в ответе JSON - PullRequest
2 голосов
/ 17 января 2011

В представлении я создаю HTML-холст с фигурами на основе данных модели в приложении. В представлении я предварительно загружаю данные модели JSON на страницу следующим образом (чтобы избежать первоначального запроса назад):

<script type="text/javascript" charset="utf-8"> 
  <% ActiveRecord::Base.include_root_in_json = false -%>
  var objects = <%= @objects.to_json(:include => :other_objects) %>;
  ...

Основываясь на взаимодействии с мышью (или касанием), я хочу перенаправить на другие части моего приложения, которые относятся к конкретному контроллеру (например, просмотр, редактирование, удаление и т. Д.).

Вместо того, чтобы жестко кодировать URL-адреса в моем JavaScript, я хочу сгенерировать их из Rails (что означает, что он всегда адаптируется к последним маршрутам).

Кажется, у меня есть один из трех вариантов:

  1. Добавить пустой атрибут к модели, которую контроллер заполняет соответствующим URL-адресом (мы не хотим использовать маршруты в модели), перед тем как будет сгенерирован JSON
  2. Создайте пользовательский JSON, куда я добавляю различные URL-адреса вручную
  3. Создание URL-адреса в качестве шаблона из Rails и замена идентификаторов в JavaScript в зависимости от ситуации

Я начинаю склоняться к # 1 для простоты реализации и удобства обслуживания.

Есть ли другие варианты, которые мне не хватает? Разве # 1 не самый лучший?

Спасибо!

Chris

1 Ответ

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

Я немного написал об этом в своем блоге: Дилемма Rails: HATEOAS в ответах XML / JSON .

Я пришел к аналогичным выводам.Насколько мне известно, не существует невероятно чистого способа сделать это, потому что по умолчанию модель отвечает за создание JSON-представления, но генерация URL-адресов является исключительно обязанностью контроллера / представления.

Не стесняйтесь смотретьнад моими мыслями / выводами и добавляйте комментарии здесь или там.

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