2015-07-21 2 views
0

У меня есть клиент с просьбой помочь им создать рубиновое приложение для взаимодействия с базой данных, созданной для другого приложения, которое работает на php. Проблема заключается в том, что, поскольку база данных не была подкрашена рельсами, она не соответствует ни одному из правил рельсов. Например, есть таблица называется formПодключить Rails-приложение к существующей базе данных

Если я запускаю команду rails generate model form тогда рельсы будут выводить имя таблицы в форме s

дальше больше я не хочу рубин выполнять какую-либо миграцию, поскольку данные уже есть в государстве, которое я хочу. Есть ли хороший способ обойти это?

ответ

1

Вам не нужно запускать миграции, чтобы иметь модель. Либо пропустите их (--no-migration), либо удалите файл после генерации. Что касается имен таблиц, посмотрите на table_name=. primary_key= также может быть удобно.

class Form << ActiveRecord::Base 
    self.table_name = 'form' 
end 
0

Есть несколько вариантов для работы с существующими базами данных. Если таблицы особы можно установить, что в вашем config/application.rb

config.active_record.pluralize_table_names = false 
+0

Спасибо, я тоже посмотрю на это, но сначала ответил Филлип, и это похоже на более традиционный путь. – richbai90

+0

Нет проблем. Вероятно, вы не хотите указывать имя таблицы для всех этих таблиц, если они соответствуют этому шаблону –

0

The rails g model ModelName --migration=false команда будет делать эту работу, то эта команда будет создавать свои модели ModelName без миграции.

Кроме того, вам нужно указать реальное имя столбца для каждой модели, как:

Рельсы> = 3.2 (включая Rails 4+):

class ModelName < ActiveRecord::Base 
    self.table_name = 'custom-table-name' 
end 

Rails < = 3,1 :

class ModelName < ActiveRecord::Base 
    self.set_table_name 'custom-table-name' 
end 
1

Укажите параметры соединения, как обычно, в config/database.yml

production: 
    adapter: mysql 
    host: somehost.somedomain.com 
    port: 3306 
    user: sqluser 
    password: ********** 

Вы можете указать имя таблицы для модели ActiveRecord, что не соответствует Rails конвенций, как так:

class Form < ActiveRecord::Base 
    self.table_name = 'tblForms_tbl' 
end 

Если некоторые из имен столбцов хлопотно, как зарезервированные слова или столбцы со специальным значением для ActiveRecord (например, «type»), вы можете настроить для них пользовательские аксессоры или использовать alias_attribute.

class Form < ActiveRecord::Base 
    self.table_name = 'tblForms_tbl' 
    self.primary_key = 'formID' 
    self.inheritance_column = :_type_disabled 

    alias_attribute :formsTitle, :title 

    # use self.category as an accessor for the "type" column 
    def category=(type) 
    attr_writer :type, type 
    end 

    def category 
    attr_reader :type 
    end 

end 
Смежные вопросы