Rails: создание моделей из существующих таблиц?

У меня уже есть таблицы, созданные из другого проекта. Их имена отформатированы как aaa_bbb_ccc_ddd (все не множественное число, а некоторые части не являются условным словом). Я успешно создал схему из базы данных, прочитав этой. Но теперь я должен сделать настоящие модели. Я смотрел на RMREБЫЛ, но они применяют соглашение ActiveRecord на моих таблицах и меняют их имена, что я не хочу делать, потому что другие приложения зависят от них таблицы.

каков наилучший способ автоматического создания моделей и схемы из существующих таблиц?

2 ответов


просто теория, не уверен, как это будет работать в реальных приложения:

создать models назван ActiveRecord конвенция требует, например для таблицы aaa_bbb_ccc_ddd вы создадите модель AaaBbb и сопоставьте эту модель с вашей таблицей:

class AaaBbb < ActiveRecord::Base
    self.table_name = "aaa_bbb_ccc_ddd"
end

или более человеческий пример:

class AdminUser < ActiveRecord::Base
    self.table_name = "my_wonderfull_admin_users"
end

теперь у вас будет AaaBbb как ресурс в маршрутах означает, что у вас будет url-адрес:

 .../aaa_bbb/...

и если вы хотите использовать имя таблицы в url I думаю, вы могли бы переписать маршруту:

get 'aaa_bbb_ccc_ddd/:id', "aaa_bbb#show", as: "aaa_bbb"

опять же, просто теория,которая может помочь вам. Я еще не работал с такими случаями, но начал бы с этого.


редактировать

to автоматизация создание модели из базы данных:

https://github.com/bosko/rmre

но я думаю, что это создаст модели по соглашению rails с именами wierd, которые вы будете должны использовать в качестве ресурса в приложении.


хороший шаблон, который я нашел на SO, если вы хотите использовать имя модели, отличное от имени таблицы:

class YourIdealModelName < ActiveRecord::Base
  self.table_name = 'actual_table_name'
  self.primary_key = 'ID'

  belongs_to :other_ideal_model, 
    :foreign_key => 'foreign_key_on_other_table'

  has_many :some_other_ideal_models, 
    :foreign_key => 'foreign_key_on_this_table', 
    :primary_key => 'primary_key_on_other_table'
end

альтернативное решение: https://github.com/wnameless/rare_map

Это не заставит вас изменить что-либо из ваших существующих таблиц.