面试题答案
一键面试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
上述代码中:
- 首先设置了DataMapper与数据库的连接,并定义了
User
和Order
模型及其关联关系。 - 计算出过去一周的日期,用于后续过滤。
- 使用
User.all
方法,通过条件过滤,直接获取满足条件的用户的姓名和邮箱,减少数据库查询次数。 - 最后遍历结果并输出用户信息。