簡體   English   中英

如何在 Ruby On Rails 中使用沒有模型的 Faker gem?

[英]How to use Faker gem without a model in Ruby On Rails?

第一次在這里發帖。 我目前有一個 Ruby on Rails 項目,其中有一個 PostgreSQL 數據庫。 我最近在 PostgreSQL 數據庫中創建了一個表,我想生成假數據來填充它。 問題是我通常這樣做的方式是使用模型,而我的 PostgreSQL 數據庫中的表沒有這種模型。 我通常會做這樣的事情:

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

如果我沒有模型,我該怎么做? 可以用表名來做嗎? 如果我只使用表名(它沒有模型),我會收到這個錯誤: NameError: uninitialized constant

任何幫助表示贊賞:)

aburr 完美地回答了我的問題!

我的第一個想法是,如果您沒有與 SQL 表相關聯的任何類型的模型或類,那么您可能能夠執行 SQL insert語句。

也許像這樣

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

這是 Faker 自述文件https://github.com/faker-ruby/faker/blob/master/README.md#usage

以及在 Ruby 中使用 SQL 的參考http://zetcode.com/db/postgresqlruby/

我建議為桌子制作一個模型。 這是微不足道的。 如果您使用的是 Rails 6,則可以使用insert_all顯着加快創建速度。

class SomeThing < ApplicationRecord
end

如果你想放棄,你可以使用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考慮使用FactoryBot

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

FactoryBot.create_list(:some_thing, 50)

問題不在於 gem 'faker',實際上它是一個假數據生成器。 所以問題是關於 ActiveRecord,你需要找出關於ActiveRecord的文檔。
通常, Model.create(foo: 'bar')表示insert into Model (foo) values('bar')
所以 ActiveRecord 有原始的 sql 操作,以防你有一些更復雜的場景ActiveRecord::Base.connection.execute(sql)
如果您有機會使用寶石sequel ,您將對幕后有更多的了解。

  • 數據庫(MySQL、PG)
  • 數據庫連接器(mysql2,pg)
  • ORM (ActiveRecord, Sequel)

這就是您處理數據庫所需的全部內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM