Ruby on Rails复数(控制器)和单数(模型)约定 - 解释

63
按照Ruby on Rails的约定,控制器名称是复数形式,而模型名称是单数形式。例如:一个名为Users的控制器,但是一个名为User的模型。
rails generate controller Users
rails generate model User name:string email:string

现在打开迁移文件

 class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :name
      t.string :email    
      t.timestamps
    end
  end
end

这里表名是复数形式(users)。

因此,我的问题是 - 为什么表名是复数形式(users),即使模型名是单数形式(User)?

5个回答

58

Ruby on Rails 遵循语言约定。这意味着模型代表一个单一用户,而数据库表由多个用户组成。


3
非标准复数形式应该怎么处理呢?例如,如果我的模型是“Activity”,那么表格的复数形式是“Activities”还是“Activitys”?请你翻译这段内容。 - sak
6
Rails辅助方法"pluralize"非常聪明,它知道'person'的复数形式是'people'等等。这将用于"Activities"。详情请见:http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-pluralize - Matt Connolly
2
Rails模型的复数约定是否假定模型是用英语编写的? - duhaime

13

你的User模型的一个实例代表单个用户,因此是单数形式。相比之下,users表包含所有用户,因此是复数形式。


4

为了完善Emily的回答

你的User模型的一个实例代表一个单一的用户,因此是单数。相比之下,users表格包含了所有用户,所以它是复数形式。


1
在Rails中,控制器和表名都是复数形式,而模型则是单数形式。对于由两个单词组成的名称,第二个单词会被转换为复数形式!

0

因为这个表存储用户信息,这只是一种约定。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接