【问题标题】:REST & Rails: What is the best way to show different views for a given resource and action?REST & Rails:为给定资源和操作显示不同视图的最佳方式是什么?
【发布时间】:2010-08-11 00:23:47
【问题描述】:

我有一个资源,Inventory,需要根据上下文“显示”大约 4 种不同的方式。解决这个问题的最佳方法是什么?

我在想我可以传入一个参数 (param[:context]),让“显示”操作呈现正确的视图。或者也许我应该制作另一个控制器,虽然这看起来有点多。当您想保持 RESTful 但您的资源需要以多种不同方式显示时,最佳做法/一般准则是什么?

【问题讨论】:

  • 需要展示哪些不同的上下文
  • 嗨 Jed - 上下文 1:当将鼠标悬停在库存项目(提案/显示)上时,我会执行一个 ajax 弹出对话框,在库存控制器上呈现 show.js.erb。上下文 2:在另一个页面(库存/索引)上,我有一个类似的弹出对话框,它也需要呈现库存控制器的显示操作,但视图不同——它是一个比其他弹出窗口更大、扩展的视图。现在我将 param[:view_type] 传递给 show.js.erb,然后根据该值呈现“mini_view”或“expanded_view”部分。有更好的方法吗?

标签: ruby-on-rails rest


【解决方案1】:

这个问题很棘手,因为有很多选择,但答案取决于你想做什么。

上下文是否代表了模型中的某些内容?那么你应该使用不同的模型,不同的控制器。

上下文是否代表 REST 操作以外的其他内容?添加一个自定义 REST 操作 (http://railscasts.com/episodes/35-custom-rest-actions) 及其各自的路由(在我看来,您在这里尝试做什么)。

视图是否相同,只是标记不同?您可以使用 Cells (http://cells.rubyforge.org/) 来抽象您的演示模式。

如果您不想破坏 RESTful 状态,我强烈反对创建多个操作,但最终这也是一种解决方案。

【讨论】:

  • 谢谢,丘巴斯。在一个页面上,我使用 ajax 将 show.js.erb 呈现到一个对话框中。这是库存项目的基本视图。在另一个页面上,我想呈现一个稍微不同的视图(通过 ajax,再次进入对话框),但具有不同的样式和更多的内容(显示更多与库存项目相关的字段)。现在我只是通过指定“view_type”的ajax调用传递一个参数。根据视图类型,我在 show.js.erb 中呈现“mini_view”部分或“expanded_view”部分。它有效,但自定义操作是更好的方法吗?
【解决方案2】:

我只会对每个对象所需的每种“显示”类型使用不同的操作,这样您就不必担心传递上下文变量并分离要呈现的视图。
只需确保您的路线设置正确,并为您设置的不同上下文类型链接到正确的操作。

【讨论】:

  • 这很合理,但有没有更好的 RESTful 替代方案?
猜你喜欢
  • 1970-01-01
  • 2014-10-20
  • 2020-05-27
  • 1970-01-01
  • 2014-01-23
  • 2012-12-22
  • 1970-01-01
  • 2016-08-15
  • 1970-01-01
相关资源
最近更新 更多