对于某些模型,我希望提供允许用户根据现有记录的副本创建具有默认属性的新记录的功能。
我想知道什么是正确的 Restful 路线。
我最初的想法是它可能是 new
的参数。行动。 IE。借用Rails Guides examples ,而不仅仅是:
获取:/照片/新
还允许:
获取:/照片/新/:id
...哪里:id
是用作模板的记录的 id。响应将是一个新的/编辑表单,与普通的旧表单相同 new
但这些值将用现有记录中的数据预先填充。 new
可以轻松处理该参数(或没有它)。 Controller 方法。
替代方法似乎是创建一个新的 Controller 方法,例如 copy
这也将接受现有记录的 id 并使用上述新表单进行响应。这对我来说似乎有点“不正确”,因为记录实际上并不是 已复制 直到用户保存新记录(可能在稍微编辑之后)。
蒂亚...
更新:我的问题不是“我如何在 Rails 中做到这一点?”,而是“它是 RESTful 吗?”
最佳答案
my question is not "how do I do this in rails?", it's "is it RESTful?"
不,不是。就此而言,
GET /photos/new
也不是。 .在过去,Rails 似乎无可救药地陷入困境,在过去,它被认为是高级程序,用于 URI 上的 GET 返回一个 HTML 表单,然后将 x-www-form-urlencoded 数据POST 回同一个 URI。该 POST 的不透明度迫使他们发明新的动词作为 URI,例如 /photos/new
,当您可以使用 PUT 代替,或者至少使用相同媒体类型的 POST 时。RESTful 复制 HTTP 资源的最简单方法是:
GET /photos/{id}/ -> [representation of a photo resource]
...make modifications to that representation as desired...
POST /photos/ <- [modified representation]
如果您正在为浏览器实现此功能,您应该能够很容易地通过 Ajax 执行这些操作,使用的 HTML 页面可能位于
/photos/manager.html/
。插入与用户的互动。
关于ruby-on-rails-3 - "new from copy"的 REST 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7251581/