关于公式(名词与动词)的 Rails 自定义控制器操作的良好命名约定是什么?

What is a good naming convention for Rails custom controller actions regarding formulation (noun vs verb)?

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

我发现很多 information 描述了不同文件的命名约定和 类 以及关于正确语法的内容,但是 none 关于 controller#actions 的公式部分。

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

Controllers In rails 根据我的阅读和经验

Controller class 名称使用 CamelCase 并以 Controller 作为后缀。 Controller 后缀总是 singular。资源的名字通常是复数.

控制器操作使用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

假设您遵循传统的 RESTful 方法,那么遵循 indexshownew/createedit/updatedestroy。也就是说,除非你有充分的理由不这样做,否则你应该能够向你自己和可能的其他开发人员证明 为什么 默认操作名称是不够的。

使用默认方法名称,您会得到很多路由等内容 "for free",因为 Rails 假定您遵循约定。另外,请注意,可能不会立即听起来像 "resources" 的东西通常可以很容易地建模,例如你的例子“payment_history”很可能是另一个资源的子资源(User?),在这种情况下你会有一个单一的嵌套路由,例如GET /users/{user_id}/payment_history。该路由随后将调用 PaymentHistoryController#show,如 Rails guide section on singular resources.

中所示

我不知道它有那么重要,但总的来说我认为你在寻找一个动词。您的模型通常是名词,控制器定义动作。

在我看来,选择动作名称的重点不应该是根据它是名词还是动词,动作名称应该描述动作本身的行为,是否 calculates/gets/loads/renders/etc 东西。这样,当另一个人(或者很久以后的你)阅读代码时,he/she 应该能够很容易地理解这个动作是用来做什么的,以及这个动作的预期结果是什么。

否则你可以把它命名为*随便*因为ruby不禁止你这样做。

例如,我们可以看一下 payment_historylist_payment_history。如果我正在阅读代码并看到名为 list_payment_history 的操作,我知道它 列出了 历史记录,即使不查看代码我也理解该操作的目的。但是如果看到payment_history,我只能理解是和历史有关,并不能理解具体的意思,是显示历史,还是排序历史,存档历史。。。没有具体的理解目的行动的。