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

时间:2010-12-12 13:20:38

标签: ruby-on-rails orm activerecord naming-conventions

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

People = Person
Ducks = Duck
Geese = Goose 
Categories = Category

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

注意:在此处移动了此问题的第二部分:Does ActiveRecord assign a key to every table using the naming convention “ID”, and if so, why?

1 个答案:

答案 0 :(得分:10)

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

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