Вложенные RESTful маршруты в Rails: как мне организовать свои представления? - PullRequest
0 голосов
/ 09 февраля 2010

Допустим, у вас есть ресурс Invoice, и у каждого Invoice есть вложенные ресурсы InvoiceLine, то есть очень распространенный шаблон вложенных ресурсов.

Теперь, где следует разместить представление для отображения каждой отдельной строки счета-фактуры в виде строки в счете-фактуре? Должны ли строки счета-фактуры отображаться как частичные в invoices/_line.html.erb, или они должны получить свой собственный полноценный вид в invoices_lines/show.html.erb? Обычно первый вариант был бы очевидным выбором, но когда вы добавляете функциональность AJAX (для добавления и редактирования строк в представлении счета-фактуры), все усложняется.

Я регулярно сталкиваюсь с этим, и я не совсем уверен, как правильно с этим справиться.

Вот что я думаю:

RESTful маршрут для этого, вероятно, будет выглядеть примерно так:

map.resoures :invoices do |invoice|
  invoice.resources :lines, :controller => :invoice_lines
end

Стандартная структура папок для представлений:

app/
  views/
    invoices/
    invoice_lines/

Теперь, при рендеринге всей накладной со всеми ее строками, я склоняюсь к тому, чтобы каждая строка превращалась в _line.html.erb частичное в invoices/. Но затем, когда я хочу добавить некоторую функциональность AJAX для добавления и редактирования строк, PUT и POST направляются в контроллер строк счета-фактуры, поэтому разве строки строк не должны отображаться стандартным представлением show.html.erb в invoice_lines.erb?

Так что мои взгляды должны выглядеть так:

app/
  views/
    invoices/
      index.html.erb
      show.html.erb
      _line.html.erb
    invoice_lines/

Или вот так:

app/
  views/
    invoices/
      index.html.erb
      show.html.erb
    invoice_lines/
      index.html.erb
      show.html.erb

Я застрял между тем, чтобы InvoiceLinesController отображал свой ответ на запросы AJAX, используя частичное в invoices/_line.html.erb, или я могу поместить код шаблона строки строки в invoice_lines/show.html.erb, и invoices/show.html.erb отображать отдельные строки как компонент или AJAX-запрос к InvoiceLinesController # index.

Ни одна из альтернатив не чувствует себя хорошо. Любые предложения по лучшей практике здесь?

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

1 Ответ

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

Как насчет того, чтобы поместить частичный _line.html.erb в папку invoice_lines и затем использовать его в шаблонах invoices_lines / show.html.erb и invoices / show.html.erb.

Вот так я и делал в подобных ситуациях.

  • Таким образом, весь код вида, специфичный для счета, находится в папке счета, а весь код invoice_line находится в папке invoice_line.
  • Вы СУХОЙ: вы можете использовать Ajax-вызовы для контроллера invoice_line или визуализировать все это, отобразив invoice / show.html.erb. invoice_items будет отображаться оба раза через один и тот же фрагмент в invoice_lines / _line.html.erb

Надеюсь, это имеет смысл и является своего рода ответом на ваш вопрос. Я еще не слишком разбираюсь в Rails, поэтому не могу сказать, является ли это «лучшей практикой»

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