2010-02-09 3 views
0

Допустим, у вас есть ресурс Invoice, и каждый счет-фактура имеет вложенные ресурсы InvoiceLine, то есть очень общий вложенный шаблон ресурса.Вложенные маршруты RESTful в Rails: как мне организовать свои представления?

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

Я нахожусь на самом деле, борясь с этим на регулярной основе, и я не уверен в правильном способе борьбы с ним.

Вот что я имею в виду:

успокоительной маршрут для этого, вероятно, выглядеть следующим образом:

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 #.

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

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

+0

Не ожидал такой оглушительной тишины. Разве я не достаточно ясен, или все остальные тоже не понимают этого? –

ответ

2

насчет поставить частичную _line.html.erb в папку invoice_lines, а затем использовать этот частичный в шаблоне invoices_lines/show.html.erb и счетов-фактур/show.html.erb.

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

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

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

+0

Это то, что я бы сделал. –

Смежные вопросы