У меня нет настроенной среды Rails, и на самом деле довольно сложно найти быстрый ответ, поэтому я спрошу экспертов.
Когда Rails создает таблицу на основе вашей «модели», которую вы настроили, создает ли Rails таблицу, которая точно отражает эту модель, или он добавляет в таблицу больше полей, чтобы помочь ей творить чудеса? Если да, то какие еще поля он добавляет и почему? Возможно, вы могли бы вырезать и вставить структуру таблицы или просто указать мне на раздел документации или учебника, посвященный этому.





В ActiveRecord модели создаются из таблиц базы данных, а не наоборот.
Вы также можете изучить Migrations, способ описания и создания базы данных из кода Ruby. Однако миграция не связана с моделью; модель по-прежнему создается во время выполнения на основе формы базы данных.
На сайте Rails есть скринкасты, связанные с ActiveRecord и Migrations: http://www.rubyonrails.org/screencasts
Я когда-либо использовал только ActiveRecord. Возможно, вы видели другую систему доступа к данным.
Ixion, вы, вероятно, думаете о знаменитом видео «Блог за 15 минут», в котором использовались миграции для внесения изменений в схему базы данных, которые сразу же отражались в формах на экране из-за использования строительных лесов.
DataMapper («конкурент» ActiveRecord) использует подход к описанию таблицы непосредственно в файле модели. Однако DM используется больше с Merb, чем с Rails. Может быть, вы видели скринкаст Merb / DM?
Здесь - официальная документация по ActiveRecord. Согласен с Брэдом. Возможно, вы видели либо другой метод доступа, либо миграцию (которая изменяет таблицы и, следовательно, модель)
Если вы создаете совершенно новое приложение, включая новую базу данных, вы можете построить весь бэкенд с помощью миграций. Бег
ruby script/generate model User name:string
создает как файл user.rb для модели, так и миграцию:
class CreateUsers < ActiveRecord::Migration
def self.up
create_table :users do |t|
t.string :name
t.timestamps
end
end
def self.down
drop_table :users
end
end
Вы можете видеть, что по умолчанию сценарий создания добавляет «отметки времени» для (созданного и последнего обновленного), и они управляются автоматически, если им разрешено оставаться в наличии.
Не видно, но важно то, что дополнительный столбец «id» создается как единственный первичный ключ. Однако это не обязательно - вы можете указать свой собственный первичный ключ в модели, что полезно, если вы работаете с устаревшей схемой. Предполагая, что вы сохраняете я бы в качестве ключа, Rails будет использовать любые специфичные для СУБД функции, доступные для новых значений ключа.
У меня был небольшой опыт переноса устаревших баз данных в Rails и доступа к базам данных Rails из внешних скриптов. Похоже на то, что вы пытаетесь сделать. Я имею опыт работы с базами данных Rails, построенными на базе MySQL, поэтому ваш опыт может отличаться.
Одно скрытое поле является наиболее очевидным - поле «id» (целое число), которое Rails использует в качестве первичного ключа по умолчанию. Если вы не укажете иное, каждая модель в Rails имеет поле «id», которое представляет собой уникальный увеличенный целочисленный первичный ключ. Это поле «id» будет автоматически появляться в любой модели, созданной в Rails посредством миграции, если вы не укажете Rails не делать этого (указав другое поле в качестве первичного ключа). Если вы работаете с базами данных Rails вне самого Rails, вы должны быть осторожны с этим значением.
Поле «id» - ключевая часть магии Rails, потому что оно используется для определения ассоциаций Rails. Допустим, вы связали две таблицы вместе - Group и Person. Модель Group будет иметь поле «id», а модель Person должна иметь собственное поле «id» и поле «group_id» для отношения. Значение в «group_id» будет относиться к уникальному идентификатору связанной группы. Если вы построили свои модели в соответствии с этими соглашениями Rails, вы можете воспользоваться преимуществами ассоциаций Rails, сказав, что модель группы «has_many: people» и модель Person «принадлежит_to: group».
Миграции Rails также по умолчанию хотят добавить поля created_at и updated_at (так называемые «отметки времени»), которые являются полями datetime. По умолчанию они используют преимущества «магии» в базе данных - а не в самом Rails - для автоматического обновления при создании или изменении записи. Я не думаю, что эти столбцы вас сбивают с толку, потому что о них нужно позаботиться на уровне базы данных, а не с помощью какой-либо специальной магии Rails.
Поля created_at и updated_at обрабатываются в Rails, а не с помощью какой-либо «магии» базы данных. Вы можете увидеть это прямо в сгенерированном SQL.
Это странно, потому что в видео, которое я видел, как какой-то парень демонстрировал удивительность Rails, внес изменения в модель и распространил эти изменения в базу данных. Или я ошибаюсь?