【问题标题】:RESTful Actions Best PracticesRESTful 操作最佳实践
【发布时间】:2025-12-05 18:20:03
【问题描述】:

我的 RESTful 用户模型在 Rails 3 中运行良好。我想添加一个新选项,以根据从 LDAP 服务器查询的信息创建新用户。

我想要建议的是如何最好地做到这一点。到目前为止,这是我的想法,但我不知道它是否符合 Rails 最佳实践:

编辑用户的资源路径以接受 GET 和 POST 到名为“import_ldap_user”的新视图。

导入 LDAP 用户然后显示一个使用 AJAX(POSTing to import_ldap_user)的表单,以允许访问者在 LDAP 中搜索一个人。结果显示在页面上,如果可以接受,用户点击“创建”,然后调用 /user/create。

这对我来说似乎很糟糕的部分原因是:

  1. 我需要将正确的@user 发布到/user/create,但我不确定我的AJAX 调用是否可以生成正确的@user。
  2. 我不知道向 RESTful 用户路由添加新动词是否是一种不好的做法。
  3. 我不知道使用 AJAX POST 到 import_ldap_users 是否是适当的关注点分离。

有什么想法吗?任何 Rails 完美主义者对这应该如何工作有意见?

【问题讨论】:

    标签: ruby-on-rails rest


    【解决方案1】:

    发布到 /user/create 的不是 @user 对象,而是它的属性。一个脚手架的创建操作可能会有类似于@user.new(params[:user]) 的东西,它只是拉取已发布的用户属性并基于该属性创建一个新对象。

    即使您的 AJAX 调用没有以 new 方法可以处理的方式提供属性,您也可以简单地修改您的 create 以便它处理发布数据。

    至于最佳实践,这绝对是我过去考虑过的事情,但我不知道是否有“正确”的答案。我认为有一个发布到 create 方法的新视图是完全可以接受的,如果你想严格遵循 CRUD 模式,你也可以创建一个新控制器。

    绝对是一个好问题,如果有人有更好的答案,我很乐意听到。

    【讨论】: