Rails 3 - Легко работать с именами столбцов Pascal Case - PullRequest
1 голос
/ 05 января 2011

Мы начинаем интерфейс Rails 3 с недавно разработанного приложения, написанного на уровне данных Java / SQL Server.

Из-за предыдущего опыта команды все имена столбцов в Pascal Case (Id, Name, MyTableId) и имена таблиц в единственном числе (не во множественном числе). Есть ли способ легко переписать соглашения по рельсам по умолчанию для работы с этой моделью данных?

Я понимаю, что это может быть сделано с помощью set_table_name и псевдонимов столбцов, но такой вид отрицает цель использования Rails для быстрой разработки приложения, поскольку нам пришлось бы дублировать нашу существующую кодовую базу уровня домена.

Я нашел фрагмент кода ниже, который в некоторой степени удовлетворит мои потребности, это лучший способ / это все еще действует?

http://snippets.dzone.com/posts/show/2034

Ответы [ 2 ]

2 голосов
/ 05 января 2011

Одна часть вашей проблемы решается с помощью опции ActiveRecord :: Base. В вашей среде .rb, введите

ActiveRecord::Base.pluralize_table_names = false

Ваши другие проблемы, насколько я могу судить, должны быть решены путем погружения в код генератора моделей и определения, где он массирует ваши атрибуты в именах столбцов. Как только база данных и ее схема соответствуют вашему соглашению, ActiveRecord должен (из моего понимания) автоматически сгенерировать свои атрибуты с этим соглашением. Простой способ проверить это - создать быструю запись с вашими соглашениями, создать модель для этой записи, а затем использовать rails / console для печати результата column_names на экземпляре этой модели.

РЕДАКТИРОВАТЬ: Из вашего редактирования выше, я вижу, что метод methodRmissing ActiveRecord, вероятно, обеспечивает соблюдение case. Использование этой ссылки должно решить эту проблему.

Имейте в виду, конечно, что использование регистра Pascal может вызвать некоторые проблемы с Ruby, поскольку заглавные буквы без оператора разрешения области действия считаются константами, а не объектами. Например:

class Foo
  attr_reader :low,:Cap


  def initialize
     @low = "lowtest"
     @Cap = "Captest"
  end

  def bar
     self.low   #<==works
     self.Cap   #<==works
  end

  def baz
     low        #<==works
     Cap        #<==raises NameError
  end
end

Это будет означать, что код вашей модели должен будет правильно использовать self, что вы должны делать в любом случае.

0 голосов
/ 06 января 2011

Я вот что мне помогло от Вильсона.За ответ добавлено

ActiveRecord::Base.pluralize_table_names = false  

в environment.rb.

Я добавил этот класс в свой каталог моделей, и все мои модели унаследовали его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...