Как выглядит таблица db, созданная фреймворком Rails?

У меня нет настроенной среды Rails, и на самом деле довольно сложно найти быстрый ответ, поэтому я спрошу экспертов.

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
668
4

Ответы 4

В ActiveRecord модели создаются из таблиц базы данных, а не наоборот.

Вы также можете изучить Migrations, способ описания и создания базы данных из кода Ruby. Однако миграция не связана с моделью; модель по-прежнему создается во время выполнения на основе формы базы данных.

На сайте Rails есть скринкасты, связанные с ActiveRecord и Migrations: http://www.rubyonrails.org/screencasts

Это странно, потому что в видео, которое я видел, как какой-то парень демонстрировал удивительность Rails, внес изменения в модель и распространил эти изменения в базу данных. Или я ошибаюсь?

Ixion 06.10.2008 10:17

Я когда-либо использовал только ActiveRecord. Возможно, вы видели другую систему доступа к данным.

Brad Wilson 06.10.2008 10:19

Ixion, вы, вероятно, думаете о знаменитом видео «Блог за 15 минут», в котором использовались миграции для внесения изменений в схему базы данных, которые сразу же отражались в формах на экране из-за использования строительных лесов.

Patrick McKenzie 06.10.2008 10:52

DataMapper («конкурент» ActiveRecord) использует подход к описанию таблицы непосредственно в файле модели. Однако DM используется больше с Merb, чем с Rails. Может быть, вы видели скринкаст Merb / DM?

webmat 06.10.2008 16:52

Здесь - официальная документация по 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.

ScottJ 13.11.2009 06:30

Другие вопросы по теме