Rails定制控制器关于配方的动作(名词与动词)有什么好的命名约定?

时间:2017-07-07 11:28:58

标签: ruby-on-rails controller action crud convention

在控制器中定义新的操作时,我经常会问自己应该如何正确地制定操作的名称。 Rails默认的CRUD操作似乎都遵循动词 new,create,edit,update,destroy,index )的模式,但是使用名词是一个坏习惯吗?对于前者 payment_history

我发现很多information描述了不同文件和类的命名约定,并且关于正确的语法,但没有关于配方部分的控制器#操作。

编辑:我问的是自定义操作没有重命名Rails默认的CRUD操作。

4 个答案:

答案 0 :(得分:2)

假设您遵循传统的RESTful方法,最简单的方法是遵循indexshownew/createedit/update和{{ 1}}。也就是说,除非你有充分的理由不这样做,但是你应该能够为自己和其他可能的开发者辩护为什么默认的动作名称是不够的。

使用默认方法名称,您可以“免费”获得大量路由等内容,因为Rails假定您遵循惯例。此外,请注意,可能不会立即听起来像“资源”的东西通常可以很容易地建模,例如,您的示例“destroy”可能是另一个资源(payment_history?)的子资源,在这种情况下,您将拥有一个单一的嵌套路由,例如User。然后,此路线将调用GET /users/{user_id}/payment_history,如Rails guide section on singular resources中所示。

答案 1 :(得分:2)

在我看来,选择动作名称的重要事项不应该基于它是名词还是动词,动作的名称应该描述动作本身的行为,是否计算/获取/加载/渲染/等等。因此,当另一个人(或您经过很长一段时间)阅读代码后,他/她应该能够轻松了解此操作的用途以及此操作的预期结果。

否则,您可以将其命名为* * *因为ruby不会禁止您这样做。

例如,我们可以查看payment_historylist_payment_history。如果我正在阅读代码并看到名为list_payment_history的操作,我理解列出历史记录,即使不查看我理解操作目的的代码。但是,如果我看到payment_history,我只能理解它与历史有关,不是确切的含义,它是显示历史,还是排序历史,存档历史...没有具体的理解目的行动。

答案 2 :(得分:0)

我不知道这很重要,但总的来说我觉得你在寻找一个动词。您的模型通常是名词,控制器定义操作。

答案 3 :(得分:-3)

控制器根据我的阅读和经验在轨道中

控制器类名称使用 CamelCase 并将控制器作为后缀。 Controller后缀始终为单数。资源名称通常为复数

控制器操作使用 snake_case,通常匹配Rails定义的标准路由名称(索引,显示,新建,创建,编辑,更新,删除)。

控制器文件位于 app / controllers /#{resource_name} _controller.rb。

示例:

# app/controllers/bigfoot_sightings_controller.rb
BigfootSightingsController < ApplicationController
  def index
    # ...
  end
  def show
    # ...
  end
  # etc
end
# app/controllers/profiles_controller.rb
ProfilesController < ApplicationController
  def show
    # ...
  end
  # etc
end