【问题标题】:What is the real world example of using on: :new route in Rails?在 Rails 中使用 on::new route 的真实示例是什么?
【发布时间】:2015-03-13 21:38:29
【问题描述】:

我了解,当您为特定成员创建自定义路由时,您会使用

resources :photos do
  get 'preview', on: :member
end

例如,如果您想删除整个 cmets 集合,您可以使用

resources :comments do
      delete :destroy_all, on: :collection
end

但是在这种情况下你会使用 on::new。有人可以举一个详细的例子,而不是仅仅指着那些只是说的文档

.10.3 为其他新操作添加路由 要使用 :on 快捷方式添加替代的新操作:

resources :comments do
  get 'preview', on: :new
end

这将使 Rails 能够使用 GET 识别 /cmets/new/preview 等路径,并路由到预览操作 评论控制器。它还将创建 preview_new_comment_url 和 preview_new_comment_path 路由助手。

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    文档中的示例实际上是一个非常好的真实示例。

    假设您有一个 Comment 模型,它存储用户 cmets。此外,您希望能够接受新的 cmets 并允许用户预览他们的评论的外观,而无需实际保存评论。

    使用标准 CRUD 控制器,流程将是:

    • cmets/new 呈现评论表单(表单操作指向 cmets/create)
    • cmets/create 创建评论记录

    在这种情况下,还有一个额外的步骤:

    • cmets/new 呈现评论表单(表单操作指向 cmets/new/preview)
    • cmets/new/preview 在保存之前预览评论格式
    • cmets/create 创建评论记录

    所以on: :new 允许您从新动作中捎带另一个动作。现在,您可能会问自己,为什么 on: :new 不只是 on: :collection?因为 :collection 适用于对所有 cmets 进行操作的路由,而 'cmets/new/preview' 显然对单个未保存的评论进行操作。

    我希望这很清楚。让我知道是否可以更详细地解释。

    【讨论】:

    • 为什么不直接在: :member 那么呢?
    • 因为成员需要已保存记录的 :id。
    • 啊好的。错过了那部分!
    猜你喜欢
    • 1970-01-01
    • 2021-08-13
    • 2010-11-03
    • 2019-10-12
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    • 2010-12-22
    • 2018-10-26
    相关资源
    最近更新 更多