MST

星途 面试题库

面试题:Ruby中使用DataMapper进行复杂数据分析

假设你正在使用Ruby的DataMapper框架处理一个数据库,其中有两个关联的模型:User和Order。User模型有name、email等属性,Order模型有order_date、total_amount等属性,并且一个用户可以有多个订单。现在要求编写Ruby代码,使用DataMapper找出所有在过去一周内下过订单且订单总金额超过100的用户的姓名和邮箱,同时需要考虑性能优化,尽可能减少数据库查询次数。
27.4万 热度难度
编程语言Ruby

知识考点

AI 面试

面试题答案

一键面试
require 'data_mapper'

DataMapper.setup(:default, 'sqlite3:///path/to/your/database.db')

class User
  include DataMapper::Resource
  property :id, Serial
  property :name, String
  property :email, String
  has n, :orders
end

class Order
  include DataMapper::Resource
  property :id, Serial
  property :order_date, Date
  property :total_amount, Float
  belongs_to :user
end

DataMapper.finalize

# 计算过去一周的日期范围
one_week_ago = Date.today - 7

# 使用DataMapper进行关联查询并过滤
users = User.all(
  :orders.order_date.gte => one_week_ago,
  :orders.total_amount.gt => 100,
  :select => [:name, :email]
)

users.each do |user|
  puts "Name: #{user.name}, Email: #{user.email}"
end

上述代码中:

  1. 首先设置了DataMapper与数据库的连接,并定义了UserOrder模型及其关联关系。
  2. 计算出过去一周的日期,用于后续过滤。
  3. 使用User.all方法,通过条件过滤,直接获取满足条件的用户的姓名和邮箱,减少数据库查询次数。
  4. 最后遍历结果并输出用户信息。