【问题标题】:Where should a page that creates multiple resources live?创建多个资源的页面应该放在哪里?
【发布时间】:2012-05-16 19:48:35
【问题描述】:

我有一个演示模型,我通过表单以通常的方式创建。

Presentation Model 有两个嵌套资源:Recording Model 和 SlideDeck Model:

class Presentation < ActiveRecord::Base

has_one :recording
has_one :slide_deck

end

我有一个 Flash 组件,它允许用户录制演示文稿并在其持续时间内添加幻灯片。一旦用户完成创建和编辑演示文稿,他们点击保存。

此时,我需要将 Recording 和 SlideDeck 创建为 Presentation 上的嵌套资源。这意味着从一个表单创建两个模型。

我的问题是这个页面应该放在哪里?如果组件仅创建 Recording,则页面将从 recording_controller 上的新操作呈现,如果它仅创建 SlideDeck,则页面将从新的 slide_deck_controller 呈现。但是在这种情况下,我会同时创建两者。

那么组件应该放在哪里呢?是否应该通过presentation_controller 上的操作来呈现;另一个编辑动作?从某种意义上说,此页面允许通过创建其嵌套资源来编辑演示文稿。

【问题讨论】:

  • 这样的声音会进入 PresentationsController#new 和 #create。
  • @RobDavis 谢谢。这是有道理的,除了两个问题。 1. 我希望能够独立于制作录音来创建演示文稿 2. 从可用性的角度来看,我希望在创建/编辑演示文稿的任务(其名称、描述等)和录音任务之间进行某种分离/编辑录音和幻灯片。鉴于我要求这两个任务位于不同的页面中,将录制/编辑任务视为 PresentationsController 上的单独操作有什么问题吗?

标签: ruby-on-rails ruby-on-rails-3 model controller nested-resources


【解决方案1】:

通常,PresentationController#edit(和相应的#update)用于修改“Presentation”模型。如果您已经拥有#edit 和相应的#update,并且您希望在单独的操作中创建记录,那么您需要创建另一对操作。另一种选择是您可以使#update 足够通用以处理“正常编辑”和“创建记录”。在这种情况下,#edit 和 #record 操作都可以将表单提交到 #update 操作。

【讨论】:

    【解决方案2】:

    我认为它应该是演示模型中nested_attributes 的一部分,而不是您可以通过创建或更新操作将所有这些信息添加到演示文稿中

    【讨论】:

    • 谢谢。我同意。这很可能是保存录制文件后提交数据的最佳方式,但玩家应该住在哪里?应该用什么动作来渲染它的页面?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    相关资源
    最近更新 更多