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?
答案 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