ruby-on-rails - 为其他新操作添加路由的目的是什么?

标签 ruby-on-rails rest routing

指南 Rails Routing from Outside In 有一个名为 Adding Routes for Additional New Actions 的部分在第 2 章中,资源路由:Rails 默认值,示例如下:

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

生成以下路由:

             Prefix Verb   URI Pattern                     Controller#Action
preview_new_comment GET    /comments/new/preview(.:format) comments#preview

同样的结果至少可以通过另外两种方式实现:

1) 在 resources :comments 中添加一个集合路由,比如 get 'new/preview', to: :preview, on: :collection (如果你不这样做的话打扰路线名称)

2) 仅将此路由添加到相应的单一资源:

resource :comment, only: :preview do
  get 'new/preview', to: :preview, as: 'preview_new', on: :collection
end

具有完全相同的行为。

那么为什么有 on::new 选项呢?它只是一个捷径吗?如果是,为什么它只适用于“新操作”,而其他默认 REST 操作没有任何类似的选项,例如 on::editon::delete

最佳答案

这是 RESTful Action new 特有的快捷方式,其中对象被实例化但尚未持久化。

例如,如果您正在为一个新对象填写表单,您会为自己提供一个 link_to“预览”,它将所有属性发送到您的预览操作(而不是直接创建)。这类似于显示 View ,但对象只存在于内存中。

此功能对于销毁、更新、索引、显示或创建而言是不合逻辑的。我想您可以在发送更新之前分配新属性后对编辑操作使用预览,但您必须手动创建路由。

关于ruby-on-rails - 为其他新操作添加路由的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34271780/

相关文章:

ruby-on-rails - rails + Postgis : error cannot drop table spatial_ref_sys

java - restful WS 中的 WSDL 等价物是什么。如果没有,消费者如何生成所需的客户端类?

java - 如何在REST函数的ResponseBuilder中调用Javascript函数?

javascript - 通过 Passport 实例的快速路由中的路由分离

ruby-on-rails - 将 config/database.yml 的用户名更改为与您的 OSX 用户帐户相同

ruby-on-rails - 开始 Ruby on Rails 项目的流程

ruby - Ruby on Rails 3.0 中的单表继承和路由

ruby-on-rails - 使用 `config.exceptions_app = self.routes` 挽救 Rails 3.2 中的错误

ruby-on-rails - rails bundle 错误 - capybara-webkit - 无法构建 native 扩展

wcf - 如何修复 MaxItemsInObjectGraph 错误?