Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails、REST和上下文_Ruby On Rails_Rest - Fatal编程技术网

Ruby on rails rails、REST和上下文

Ruby on rails rails、REST和上下文,ruby-on-rails,rest,Ruby On Rails,Rest,我正在使用REST风格开发我最新的rails应用程序。然而,我在上下文方面遇到了一些问题。假设我有一个项目模型。我使用“编辑/更新”来处理该处理,但根据上下文的不同,对模型进行不同的编辑 有时我所做的只是更改一个“status”属性,而不需要显示整个表单。在其他情况下,我可以编辑与主对象相关联的对象,然后有用户权限来考虑。某些用户可以编辑某些属性,而其他用户不能。即使更新成功后存储在闪存中的确认消息也会有所不同 所有这些操作本质上都是编辑/更新,但不同的上下文使其更加复杂。现在,我对每种类型的更

我正在使用REST风格开发我最新的rails应用程序。然而,我在上下文方面遇到了一些问题。假设我有一个项目模型。我使用“编辑/更新”来处理该处理,但根据上下文的不同,对模型进行不同的编辑

有时我所做的只是更改一个“status”属性,而不需要显示整个表单。在其他情况下,我可以编辑与主对象相关联的对象,然后有用户权限来考虑。某些用户可以编辑某些属性,而其他用户不能。即使更新成功后存储在闪存中的确认消息也会有所不同

所有这些操作本质上都是编辑/更新,但不同的上下文使其更加复杂。现在,我对每种类型的更新使用单独的操作,例如,更改状态由/items/mark_as_sall处理。另一种方法是在调用中使用url参数来编辑或更新请求,并根据上下文以不同方式处理请求,但这会变得混乱

其他开发人员如何处理这些情况?有没有“rails方式”可以做到这一点

谢谢
ev

我对轨道或休息方面无论如何都不是专家。但我会假设在编写自己的代码时遵循指导原则

  • 将所有内容都视为资源,并坚持rest风格的资源修改/查看。这意味着show会得到一条要显示的记录,index会得到全部,post会创建新的,put会编辑,delete会销毁
  • 就视图而言,是否需要显示整个表单;这是一种观点责任。严格意义上,控制器的工作是路由到正确的模型并返回到正确的视图。除了要呈现的格式和一些其他琐碎的东西之外的任何其他逻辑;将不属于控制器
  • 如果您决定是显示整个表单还是只显示一个字段;那么你的观点应该接受这个决定。(JS可以像jquery一样在其中扮演重要角色,并且喜欢被广泛使用;它可以在客户端对您的视图进行更强大的控制)。控制器可能会在模型上调用update_属性,这将使您在需要更新多少属性方面具有灵活性
  • 权限逻辑应限于模型,并基于权限,仅提供选择性数据
  • 我在我所有的网络应用中都有自己喜欢的方法。视图和控制器之间应尽可能使用JSON。这有两个好处;它很好地分离了视图和控制器的角色,并避免了任何非故意的重叠。 它允许您将控制器作为API向全世界公开,并高效地重复使用它们。(除了一些可能需要的权限/访问相关过滤之外。)

  • 可以使用嵌套的REST更新样式更新关联的资源。我喜欢那种特别的风格,但喜欢保持资源的深度 即使是单个标志也可以使用相同的更新REST操作进行更新,只需调用update\u attributes方法即可。您确实不需要将所有内容都作为URL中的参数

    我只是相信,要最大限度地利用铁路的结构;您只需要有正确的设计,并且始终以某种方式保持REST范式和rails约定

    如果你能提供任何一段代码;你觉得他们会被侵犯的地方;然后请大家分享,也许我们都可以提出改进设计的建议


    为管理权限干杯:

    您可以根据权限将控制器分隔为多个控制器。这可以通过使用位于的导柱来完成。 关于根据上下文做出决定: 根据权限将控制器拆分为两个或多个后,可以假定角色的所有用户都路由到正确版本的控制器操作。因此,如果您使用相同的更新方法来更新整个模型或仅更新几个属性,这应该不是问题