Как использовать Faker gem без модели в Ruby On Rails? - PullRequest
1 голос
/ 31 марта 2020

Первое размещение здесь. В настоящее время у меня есть проект Ruby on Rails, в котором у меня есть база данных PostgreSQL. Недавно я создал таблицу в базе данных PostgreSQL и хотел создать поддельные данные для ее заполнения. Проблема в том, что я обычно делаю это, используя модель, которой у меня нет для моей таблицы в моей базе данных PostgreSQL. Я бы обычно делал что-то вроде:

50.times do
  Model.create({ ...properties })
end

Как бы я go об этом, если у меня нет модели? Можно ли сделать это с именем таблицы? Если я просто использую имя таблицы (у которой нет модели), я получаю эту ошибку: NameError: uninitialized constant.

Любая помощь приветствуется:)

aburr отлично ответил на мой вопрос!

Ответы [ 3 ]

0 голосов
/ 31 марта 2020

Я бы рекомендовал сделать модель для стола. Это тривиально. Если вы находитесь на Rails 6, вы можете использовать insert_all, чтобы сделать создание значительно быстрее.

class SomeThing < ApplicationRecord
end

Если вы хотите заранее go, вы можете используйте exec_insert для выполнения вставки вручную.

ActiveRecord::Base.connection.exec_insert(
  'insert into some_thing (first_name, last_name) values ($1, $2)',
  nil,
  [[nil, Faker::Name.first_name], [nil, Faker::Name.last_name]]
);

Наконец, вместо написания 50.times { SomeThing.create(...) } вручную, рассмотрите возможность использования FactoryBot.

factory :some_thing do
  name { Faker::Name.name }
end

FactoryBot.create_list(:some_thing, 50)
0 голосов
/ 31 марта 2020

Проблема не в gem 'faker', а в том, что это фальшивый генератор данных. Так что проблема в ActiveRecord, вам нужно узнать документы о ActiveRecord .
Как правило, Model.create(foo: 'bar') означает insert into Model (foo) values('bar').
Так что ActiveRecord имеет необработанные операции sql на случай, если вы У вас есть более сложный сценарий ios ActiveRecord::Base.connection.execute(sql).
Если у вас есть шанс использовать камень sequel, вы получите больше понимания за сценой.

  • База данных (* 1023) *, PG)
  • Соединитель базы данных (mysql2, pg)
  • ORM (ActiveRecord, Sequel)

Это все, что вам нужно для обработки базы данных.

0 голосов
/ 31 марта 2020

Моя первая мысль, если у вас нет модели или класса какого-либо вида, связанного с таблицей SQL, тогда вы сможете выполнить оператор SQL insert.

может быть что-то вроде this

require 'pg'
require 'faker'

db =  PG.connect({:dbname => 'my_db_name'})

50.times do
  db.exec("insert into Users (name) values(#{Faker::Name.name}")
end

Вот файл Readme Faker https://github.com/faker-ruby/faker/blob/master/README.md#usage

и справочник по использованию SQL с Ruby http://zetcode.com/db/postgresqlruby/

...