2016-03-18 2 views
1

Я пытаюсь создать модели для существующей базы данных. У меня есть доступ только для чтения к этой базе данных. Я создал свои модели, но когда я запускаю rake db: migrate, он хочет «создать» эти таблицы. Есть ли способ удовлетворить потребности рельсов для миграции без фактического создания этих таблиц (поскольку они уже существуют)?rake db: перейти с существующей базой данных

+0

удалить файлы миграции? – jae555

ответ

1

Если ваши модели и таблицы уже выстраиваются в очереди к схеме именования Rails s - User модели =>users таблицы и т.д., и ваши модели наследуют от ActiveRecord::Base, то вам не нужно запускать миграцию на все (и не могут в любом случае поскольку миграция по определению изменяет вашу базу данных, и вы имеете доступ только для чтения).

Если имена таблиц не совпадают с именами моделей, вы можете либо изменить названия моделей, либо установить self.table_name= в своей модели. Например, если у вас есть User модель, но таблица называется accounts, вы можете сделать это:

class User < ActiveRecord::Base 
    self.table = 'accounts' 

    # other stuff here 
end 

Читайте здесь для получения дополнительной информации: http://api.rubyonrails.org/classes/ActiveRecord/ModelSchema/ClassMethods.html#method-i-table_name-3D

Кроме того, вы должны удалить файлы миграции. Если вы хотите увидеть схему в db/schema.rb, вы можете сделать дамп схемы, запустив rake db:schema:dump. Это должно сгенерировать файл, если ваши настройки верны в config/database.yml.

+0

Что делать, если мне нужно определить отношения между моделями (has_one, belongs_to и т. Д.)? Нужны ли рельсы для миграции, чтобы понять отношения в db .... или я могу просто определить его в модели? –

+1

Если вам нужно связаться с вашими ассоциациями, вы можете просто использовать 'has_one',' belongs_to' и т. Д. В модели. Они взорвутся, если ваши таблицы не имеют правильных внешних ключей, и вы пытаетесь их использовать, но они фактически не влияют на структуру вашей базы данных. Кроме того, я бы рекомендовал добавить метод 'readonly?' К вашей модели: 'def readonly ?; правда; end' При этом, если вы попытаетесь сохранить модель, Rails отменит исключение «ActiveRecord :: ReadOnlyRecord», после чего вы сможете сэкономить, если вам нужно. – flanger001

+0

@ed_is_my_name было полезно для вас? – flanger001