【发布时间】:2010-02-09 17:53:30
【问题描述】:
假设您有一个 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 被路由到发票行控制器,所以行行不应该由invoice_lines.erb 下的标准show.html.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 使用 invoices/_line.html.erb 中的部分呈现其对 AJAX 请求的响应之间陷入困境,或者我可以将行行模板代码放在 invoice_lines/show.html.erb 中,并让 invoices/show.html.erb 将各个行呈现为对 InvoiceLinesController#index 的组件或 AJAX 请求。
这两种选择都不对。对这里的最佳做法有什么建议吗?
感觉好像发票行控制器在发票上下文中呈现时应该有自己的一组视图,但 Rails 并没有明显的“上下文化”视图规定。
【问题讨论】:
-
没想到会出现如此震耳欲聋的沉默。是我不够清楚,还是其他人也对此感到困惑?
标签: ruby-on-rails rest