У меня была такая же потребность.Ответ @ buruzaemon об установке table_name и primary_key хорош, но у меня есть несколько предложений, чтобы сделать его лучше.
Я считаю, что методы стиля set_ * потеряли популярность, и в эти дни рекомендуется просто установить атрибут напрямую.,Так что
class Project < ActiveRecord::Base
self.table_name = 'Projects'
self.primary_key = 'ProjectId'
end
Кроме того, использование alias_attribute для ручного псевдонима каждого атрибута кажется утомительным.Также кажется, что можно легко забыть один.Хотя @Behrangf рекомендует против этого, я не вижу ничего плохого в использовании небольшого волшебства метапрограммирования для автоматического предоставления версии ваших атрибутов в snake_case. Я создал модуль , который делает это автоматически.Он даже не привязан к ActiveRecord, поэтому вы также можете использовать его в оболочке API или в чем-то еще, что отражает систему, которая не следует соглашениям Ruby.Я отслеживаю модуль в Gist, но для удобства он воспроизводится ниже:
module Snakeable
# Patch in our automatic snake_case methods
def method_missing method, *args
if is_snake_case?(method) &&
respond_to?(camelized = method.to_s.camelize.to_sym)
send camelized, *args
else
super
end
end
# So the object including this module will respond to
# Object#respond_to? correctly
def respond_to? method, *args
super || (
is_snake_case?(method) &&
super(method.to_s.camelize.to_sym, *args)
)
end
private
# Is the given method using the snake_case format
def is_snake_case? method
method.to_s =~ /^[a-z]+(?:_[a-z]+)*[?=!]?$/
end
end
Этот модуль зависит от метода ActiveSupport camelize
.