ActiveRecord如何从单数(类)和复数(表)推断映射; 是否可以覆盖?

blu*_*ers 8 orm activerecord ruby-on-rails naming-conventions

ActiveRecord如何推断来自单数(类)和复数(表)的映射,例如:

People = Person
Ducks = Duck
Geese = Goose 
Categories = Category
Run Code Online (Sandbox Code Playgroud)

在概念上似乎是一个好主意,但不知道我是否必须映射单数(类)和复数(表)实例,或者如果ActiveRecord有些"神奇地"做这个.另外,似乎这可能会导致更多的开销,因为必须复制一个名称并不像添加"s"那么简单.

注意:在此处移动此问题的第二部分:ActiveRecord是否使用命名约定"ID"为每个表分配密钥,如果是,为什么?

Jes*_*ott 11

Rails使用ActiveSupport :: Inflector来跟踪单词以及如何更改单词.例如,Rails将知道在user_preferences中存储UserPreference

您还可以将您的一个变形添加到变形器,以处理添加s没有意义的更奇怪的情况.

在/config/initializers/inflections.rb中,您将获得以下内容:

ActiveSupport::Inflector.inflections do |inflect|
  inflect.plural /^(ox)$/i, '\1en'
  inflect.singular /^(ox)en/i, '\1'
  inflect.irregular 'person', 'people'
  inflect.uncountable %w( fish sheep )
end
Run Code Online (Sandbox Code Playgroud)

http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html