Основной вопрос Rails: вставка строки в таблицу базы данных вручную - PullRequest
3 голосов
/ 14 декабря 2008

Я изучаю Rails, и пока все идет хорошо. Мой самый большой вопрос на данный момент: как мне вручную вставить строку в мою базу данных? У меня есть скаффолдинг для создания строк DataTypeOne, но я хочу, чтобы строка для DataTypeTwo создавалась при отправке формы для DataTypeOne (и чтобы она ссылалась на идентификатор DataTypeOne ... но я думаю, что я могу это сделать самостоятельно).

Заранее спасибо.

Ответы [ 7 ]

5 голосов
/ 14 декабря 2008

Вы создаете строки в своей базе данных, создавая и сохраняя новые объекты ActiveRecord (ваши модели).

Таким образом, в коде вашего контроллера вы можете создать новую строку DataTypeTwo, выполнив

new_record = DataTypeTwo.new
new_record.save!
4 голосов
/ 14 декабря 2008

Как сказал frankodwyer, вы действительно хотите использовать ассоциации Rails, чтобы заявить о том, что одна Модель связана с другой. Если есть отношение один к одному, вы должны использовать

принадлежит_

и

has_one

И в зависимости от того, какая модель имеет внешний ключ, вы используете один или другой. В вашем примере это звучит так, как будто DataTypeTwo имеет внешний ключ, обратно в DataTypeOne. Таким образом, у вас будет что-то вроде этого:

class DataTypeTwo < ActiveRecord::Base
  belongs_to :data_type_one
end


class DataTypeOne < ActiveRecord::Base
  has_one :data_type_two
end

И вы можете создавать записи с внешними ключами, как это

one = DataTypeOne.create(...)
two = DataTypeTwo.create(...)
two.data_type_one = one
two.save

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

Все это подробно описано в документах ActiveRecord:

http://api.rubyonrails.org/classes/ActiveRecord/Base.html

1 голос
/ 20 декабря 2008

Вам не нужно использовать скаффолдинг только для создания записей в базе данных. Все, что вам нужно сделать, это

./script/console (from your project folder)

И это даст вам полную командную среду Rails для вашего проекта. Вы можете попробовать что угодно здесь. В вашем контексте вы могли бы сделать

record = DataTypeTwo.new(:field1 => value1, :field2 => value2)
record.save

Консоль - также лучший способ опробовать что-то перед тем, как вводить его в свой код

1 голос
/ 17 декабря 2008

Если вам нужно быть более гибким, активные записи предлагают также интерфейс sql для большинства операций SQL: Операторы базы данных

1 голос
/ 15 декабря 2008

В дополнение к настройке соответствующих ассоциаций ActiveRecord, как описывает Коди Коглан, похоже, вам следует использовать обратные вызовы ActiveRecord, чтобы гарантировать, что при создании DataTypeOne будет создан DataTypeTwo и связан с DataTypeOne. В зависимости от ваших потребностей, я бы предположил, что before_create или after_create справятся с задачей.

Для получения более подробной информации см. Документацию Rails для ActiveRecord :: Callbacks .

1 голос
/ 14 декабря 2008

Вы также можете использовать следующий ярлык:

DataTypeTwo.create

Метод create создаст новый объект DataTypeTwo и сохранит запись в базе данных.

1 голос
/ 14 декабря 2008

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

Например, если вы хотите, чтобы DataTypeTwo ссылался на DataTypeOne, это потому, что DataTypeTwo «принадлежит» DataTypeOne? Или DataTypeOne «имеет много» вещей из DataTypeTwo? У Rails есть соглашения, чтобы выразить все эти виды отношений и другие. Сохранение объекта и связанных элементов в БД должно быть автоматическим, когда вы вызываете «сохранить!» метод на соответствующем объекте.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...