Как Дэйв сказал, вы ошибаетесь в некотором роде.
ActiveRecord создает методы для каждого существующего столбца в базе данных, например. если у вас есть столбец foobar в таблице, соответствующей модели, то у вас есть метод foobar
и метод foobar=(value)
.
Если вы начинаете с нового приложения Rails, вы можете и должны, вероятно, создать схему с помощью миграции, и вы можете use the migration generators built into Rails for that, and then tweak the migration files as needed и запустить rake db:migrate
.
Если вы вносите изменения в базу данных за пределами Rails, то вы уже можете получить доступ к ней через ActiveRecord, по большей части.
Если вы делаете rake db:schema:dump
, вы уже сможете увидеть столбцы из базы данных.
Если вы хотите, чтобы у вас была резервная копия схемы (включая SQL, которая не является частью существующей миграции), рассмотрите возможность использования опции config.active_record.schema_format = :sql
в config/application.rb
.Затем вместо db/schema.rb
вы получите db/structure.sql
с созданием схемы SQL, сбрасываемым в этот файл, когда вы делаете rake db:schema:dump
.
На ваш комментарий в ответе Дейва вы также хотели бы сделать требуемый атрибут. Вы можете сделать это с помощью миграции, которая изменяет колонку, чтобы сделать ее недействительной. Вы также можете добавить валидацию к модели, чтобы потребовать ее. Если вы учитесь и не должны их использовать, не используйте attr_protected
и attr_accessible
. В Rails 4 отключена защита от массового присвоения, и вы сбиты с толку, думая, что они связаны с тем, что требуется (вместо этого вы должны использовать Strong Parameters - см. Мои комментарии к вашему вопросу выше). Обязательные поля обычно должны обрабатываться с помощью ограничения БД сначала (с нулевыми или нет, а возможно, с ограничениями/триггерами), а затем с помощью валидации - на стороне сервера с помощью проверки ActiveRecord, а затем на стороне клиента в HTML/Javascript.
Я думаю, что нет, кроме того, новое поле db может быть attr_protected, но простая переменная экземпляра может быть attr_accessible. Это не критерий – apneadiving
'attr_protected' и' attr_accessible' предназначены для обеспечения безопасности массового присвоения. И они уходят в Rails 4, поэтому я не стал их использовать сейчас - вместо этого используйте Strong Parameters или Permitters (которые используют Strong Parameters), поскольку они работают в Rails 3.1+. Сильные параметры включены в Rails 4, поэтому сильные_параметры не должны добавляться в Gemfile при использовании Rails 4. –
Не говоря о том, чтобы не использовать DataMapper, но, пожалуйста, прочитайте мой ответ и прочитайте руководство Rails: http://guides.rubyonrails.org/Вы можете создать перенос для существующих вещей, которые вы сделали с БД, но тогда вам нужно будет создать записи в БД в таблице schema_migrations, указав, что они уже были запущены при использовании ActiveRecord, который является стандартным ORM для Rails. Существует более простой способ сделать то, что вы хотите, это 'config.active_record.schema_format =: sql'. –