Допустим, у вас есть ресурс 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 на самом деле нет очевидного положения для "контекстуализированных" представлений.