指南 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::edit
或 on::delete
?
最佳答案
这是 RESTful Action new 特有的快捷方式,其中对象被实例化但尚未持久化。
例如,如果您正在为一个新对象填写表单,您会为自己提供一个 link_to“预览”,它将所有属性发送到您的预览操作(而不是直接创建)。这类似于显示 View ,但对象只存在于内存中。
此功能对于销毁、更新、索引、显示或创建而言是不合逻辑的。我想您可以在发送更新之前分配新属性后对编辑操作使用预览,但您必须手动创建路由。
关于ruby-on-rails - 为其他新操作添加路由的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34271780/