使用on的真实世界示例是什么:Rails中的新路由?

时间:2015-03-13 21:38:30

标签: ruby-on-rails

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

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

例如,如果您想要删除整个评论集合,您将使用

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

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

的文档
  

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

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

这将使Rails能够使用GET识别/ comments / new / preview等路径,并路由到预览操作   CommentsController。它还将创建preview_new_comment_url   和preview_new_comment_path路线助手。

1 个答案:

答案 0 :(得分:3)

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

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

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

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

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

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

所以on: :new允许你从新动作中捎带另一个动作。现在,你可能会问自己,为什么on: :new不只是on: :collection?因为:集合适用于对所有评论进行操作的路线,而“评论/新/预览”则适用于所有评论。明确地对一个未保存的评论进行操作。

我希望这很清楚。如果我能够更详细地解释,请告诉我。