Reputation: 1668
I use this code to create db records. How I can shrink the code and use array to call one method only?
create_acquirers(args[:count_to_create].to_i)
create_companies(args[:count_to_create].to_i)
create_merchant_users(args[:count_to_create].to_i)
def create_acquirers(n)
puts ">> Creating acquirers..."
n.times { create(:acquirer) }
end
def create_companies(n)
puts ">> Creating companies..."
n.times { create(:fake_company) }
end
def create_merchant_users(n)
puts ">> Creating merchant users..."
n.times { create(:fake_merchant_user) }
end
Upvotes: 0
Views: 48
Reputation: 1357
Can't you just iterate over the symbols (model names I presume), like so:
populate_db(args[:count_to_create].to_i)
def populate_db(count_to_create)
[:acquirer, :fake_company, :fake_merchant_user].each do |model_name|
puts ">> Creating #{model_name.to_s.pluralize.humanize}..."
count_to_create.times { create(model_name) }
end
end
I'd recommend splitting that array into a method or constant:
def populate_db(count_to_create)
model_names.each do |model_name|
puts ">> Creating #{model_name.to_s.pluralize.humanize} users..."
count_to_create.times { create(model_name) }
end
end
def model_names
[:acquirer, :fake_company, :fake_merchant_user]
end
Upvotes: 1