问题描述
我需要用 ffaker 生成随机数据,但不知道如何在这里修复 abcsize
这是我所拥有的
class Library
attr_accessor :authors,:books,:orders,:readers
def initialize(authors = [],books = [],orders = [],readers = [])
@books = books
@orders = orders
@readers = readers
@authors = authors
end
def create_data
@authors = []
@books = []
@readers = []
@orders = []
100.times do
authorname = FFaker::Book.author
biography = FFaker::Book.description
title = FFaker::Book.title
name = FFaker::Name.name
email = FFaker::Internet.email
city = FFaker::Address.city
street = FFaker::Address.street_name
house = rand(1 - 10_000)
date = Time.Now.utc.strftime('%d.%m.%Y')
@authors.push(Author.new(authorname,biography))
@books.push(Book.new(title,authorname))
@readers.push(Reader.new(name,email,city,street,house))
@orders.push(Order.new(title,name,date))
end
end
end
所以我决定创建一些私有方法,但仍然有很大的 abcsize
class Library
attr_accessor :authors,readers = [])
@books = books
@orders = orders
@readers = readers
@authors = authors
end
def create_data
create_arrays
fill_arrays
end
private
def create_arrays
@authors = []
@books = []
@readers = []
@orders = []
end
def fill_arrays
100.times do
authorname = FFaker::Book.author
biography = FFaker::Book.description
title = FFaker::Book.title
name = FFaker::Name.name
email = FFaker::Internet.email
city = FFaker::Address.city
street = FFaker::Address.street_name
house = rand(1 - 10_000)
date = Time.Now.utc.strftime('%d.%m.%Y')
@authors.push(Author.new(authorname,date))
end
end
end
我真的无法将那个 ffaker 部分分开,因为:
- 来自 Books 的作者必须是 Author 类的实例。
- 从订单中预订,必须是 Book 类的实例。
如果有人能帮助我,我将不胜感激,在重构方面没有太多经验
方法分离部分按照@Sergii-k 的建议工作,但现在我在关联方面遇到了一些麻烦
class Library
attr_accessor :authors,:readers
def initialize(authors: [],books: [],orders: [],readers: [])
@books = books
@orders = orders
@readers = readers
@authors = authors
end
def create_arrays
@authors = []
@books = []
@readers = []
@orders = []
end
def create_data
create_arrays
fill_arrays
end
def show
create_data
puts @authors
puts @books
puts @orders
puts @readers
end
def build_author
name = FFaker::Book.author
biography = FFaker::Book.description
Author.new(name,biography)
end
def build_book(author)
title = FFaker::Book.title
Book.new(title,author.name)
end
def build_reader
name = FFaker::Name.name
email = FFaker::Internet.email
city = FFaker::Address.city
street = FFaker::Address.street_name
house = rand(1 - 10_000)
Reader.new(name,house)
end
def build_order(reader)
date = Time.Now.utc.strftime('%d.%m.%Y')
title = FFaker::Book.title
Order.new(title,reader.name,date)
end
def fill_arrays
1.times do
author = build_author
reader = build_reader
@authors.push(author)
@books.push(build_book(author))
@readers.push(reader)
@orders.push(build_order(reader))
end
end
end
这是现在的问题部分
def build_book(author)
title = FFaker::Book.title
Book.new(title,author.name)
end
def build_order(reader)
date = Time.Now.utc.strftime('%d.%m.%Y')
title = FFaker::Book.title
Order.new(title,date)
end
我现在得到 2 个不同的标题,因为我用这两种方法生成它们。试图传递一个参数,但没有用
def build_order(book,reader)
date = Time.Now.utc.strftime('%d.%m.%Y')
Order.new(book.title,date)
end
完成,效果很好!
class Library
attr_accessor :authors,house)
end
def build_order(book,date)
end
def fill_arrays
1.times do
author = build_author
reader = build_reader
book = build_book(author)
@authors.push(author)
@books.push(book)
@readers.push(reader)
@orders.push(build_order(book,reader))
end
end
end
这里是来自 yml 文件的日志
--- !ruby/object:Library
books:
- !ruby/object:Book
title: Case of the Missing Hungry Imp
author: Twila Mante
orders:
- !ruby/object:Order
book: Case of the Missing Hungry Imp
reader: Monty Feeney
date: 19.03.2021
readers:
- !ruby/object:Reader
name: Monty Feeney
email: lamonica.friesen@williamson.com
city: Croninport
street: Pfeffer Neck
house: 3002
authors:
- !ruby/object:Author
name: Twila Mante
biography: Ut porro deserunt voluptatem velit. Atque dicta labore ratione minima
sapiente. Dolor doloremque dolorem harum sint. At voluptatum molestias adipisci
vero. Perspiciatis rerum nesciunt maiores vitae.
解决方法
您可以进一步分离方法:
def build_author
# ...
Author.new(authorname,biography)
end
def build_book(author)
# ...
Book.new(title,author.authorname)
end
def build_reader
# ...
Reader.new(name,email,city,street,house)
end
def build_order(book,reader)
# ...
Order.new(book.title,reader.name,date)
end
def fill_arrays
100.times do
author = build_author
reader = build_reader
book = build_book(author)
@authors.push(build_author)
@books.push(book)
@readers.push(reader)
@orders.push(build_order(book,reader))
end
end
更新:我注意到,有些参数是跨方法共享的。您可以将它们作为参数传递。
更新:修正书名。