假设您有一个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被路由到发票行控制器,所以不应该通过{{1下的标准show.html.erb
视图呈现行行。 }}?
我的观点应该是这样的:
invoice_lines.erb
或者像这样:
app/
views/
invoices/
index.html.erb
show.html.erb
_line.html.erb
invoice_lines/
我遇到InvoiceLinesController使用app/
views/
invoices/
index.html.erb
show.html.erb
invoice_lines/
index.html.erb
show.html.erb
中的部分来呈现对AJAX请求的响应,或者我可以将行行模板代码放在invoices/_line.html.erb
中,并且invoice_lines/show.html.erb
将各行作为组件或AJAX请求呈现给InvoiceLinesController #index。
两种选择都不对。有关最佳做法的任何建议吗?
感觉发票行控制器在发票上下文中呈现时应该拥有自己的一组视图,但Rails实际上没有明确规定“上下文”视图。
答案 0 :(得分:2)
如何将部分_line.html.erb放入invoice_lines文件夹,然后在invoices_lines / show.html.erb模板和发票/ show.html.erb中使用此部分。
这就是我在类似情况下的表现。
我希望这是有道理的,并且可以回答你的问题。我对Rails还不太熟悉,所以我不知道这是不是“最佳实践”