【问题标题】:Nested RESTful routes in Rails: how should I organize my views?Rails 中的嵌套 RESTful 路由:我应该如何组织视图?
【发布时间】: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


【解决方案1】:

如何将部分 _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 还不太熟悉,所以我不知道这是否是“最佳实践”

【讨论】:

  • 这也是我会做的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多