rails如何/为什么决定使用复数或单数命名约定来命名某些文件?

时间:2014-03-31 00:32:19

标签: ruby-on-rails model controller

当我跑步时

rails generate scaffold HighScores

我得到一个名为" high_scores"的移植,一个名为" high_score"的模型,一个名为" high_scores"的视图,以及一个名为的控制器" high_scores" (其中包括" @ high_scores"," @ high_score"和" HighScore")

为何会出现这种差异?

2 个答案:

答案 0 :(得分:2)

模型

按惯例,模型是单数的,因为它表示像Post,User等单个对象..但数据库表名是复数,因为它们代表对象的集合。

在您的案例中,模型名称为HighScore,rails将在文件class HighScore < ActiveRecord::Base中查找类定义high_score.rb。您可以在课程中执行所有验证和模型相关任务。

控制器

控制器是复数,因为它代表模型对象。尽管为控制器使用多个名称只是一种惯例。例如,用户控制器将表示来自用户模型的对象。

在您的情况下,scaffold将生成一个控制器HighScores,rails将在文件class HighScoresController < ApplicationController

中查找类定义high_scores_controller.rb

在您的控制器中,您可以找到一些宁静的操作,例如indexshoweditupdatedestroy。索引操作的目的是列出所有高分,以便定义一个实例变量@highscores,它将存储数据库表中的所有高分,如 @high_scores = HighScore.all ,然后传递给索引视图。同样,show动作的目的是显示单个高分。在您的show动作中,您可以定义一个实例变量 @highscore,它将存储一个特定的高分形式数据库表格,如 @high_score = HighScore.find(params[:id]) ,十个传递给它以显示视图。

答案 1 :(得分:1)

为了解释你的问题,我举了一个如下例子:

rails generate scaffold User name:string email:string

我们使用单数名称User而不是Users,因为脚手架的名称遵循模型的惯例,这些模型是单数的,而不是资源和控制器,它们是复数。

我认为这个答案对你有帮助。