[英]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
,您將對幕后有更多的了解。
這就是您處理數據庫所需的全部內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.