Rails – map.resources的冗余RESTFUL操作? (新的,创造)

我想知道为什么当你使用map.resources在rails中创建restful路由时,它会生成新的,创建,编辑,更新的操作 ? 在为创建更新声明一个动作并执行类似的操作时有什么不对吗?

def create unless post? @user = User.new else redirect_to :action => 'index' if user.create(params[:user]) end end 

所以我们可以有类似的东西

 :GET users/create # to show the form (same as action - new) :POST users/create # to create a new user 

由于Restful基于动词,这不是最好的使用方法吗?

感谢您的关注

我认为这里有两个相关但不同的问题:暴露的URL和它们被路由到的控制器方法。 由于其中任何一个都可以独立更改,我将分别解决它们。 另外,请注意,我将稍微松散地讲一下,并严格讲述在Rails环境中实现的REST。

就外部URL而言,我认为有助于区分构成系统API的URL( :GET users/1:PUT users/1等)以及那里的URL以方便人们使用网络浏览器( users/newusers/5/edit等)。 API只是以某种方式获取资源或与它们交互 – 这些是另一台计算机在与系统交互时将使用的URL。 这些URL通常只是您要与之交互的资源的地址,然后您使用HTTP方法和参数来指示您想要做什么(GET =显示此资源,PUT =更改此资源等)。 便利URL用于显示表单,以便人们更容易使用API​​。 您可以使用curl编辑用户,手动输入您想要更改的所有参数,并对用户/ 1进行POST,但作为人类,如果您可以使用表单则更容易。

要查看上面的示例,那么, :GET users/create可能有意义(并且非常类似于:GET users/new这是默认设置),但是:POST users/create将大致转换为“创建一个新的用户/创建“,这没有多大意义。

就控制器方法而言,“新”和“创建”正在执行根本不同的任务,希望从前面的段落中可以清楚地看出。 其中一个是显示表单,另一个是创建新资源。 当然,您可以重载相同的方法来执行此操作,但没有令人信服的理由这样做,创建两个小的独立方法来处理两个小的独立任务可能是一种更自然的方法。

Interesting Posts