0

人员表

-------------------------------------------------- ----------
编号 | 姓名 | 成本价格 | 出售价格 | 产品编号 |
-------------------------------------------------- ----------
 1人1 10000 20000 1
 2人2 20000 30000 2
 3人3 30000 40000 3

产品表

--------------
编号 | 姓名 |
--------------
 1 个产品1
 2 产品2
 3 产品3
我的 SQL 查询
选择名称,(成本价格 - 销售价格)作为利润,产品名称
从人
person.product_id = products.id 上的内部连接产品
其中product.id = 1
按 product.name asc 排序

我无法在 Data Mapper 中复制它,这是我尝试过的(我已经正确定义了模型及其关联)

人.所有(

# SQL 连接等价
  Person.product.id => 1,  

#products.name 怎么定义呢?
# 也可以直接取cost_price-selling_price作为利润还是
# 我们需要对结果集进行建模吗?
  :fields => ['id', 'name', 'cost_price', 'sales_price']

# 如何按 product.name 订购?
  :order => []
)
4

1 回答 1

1

获取人:

person = Person.first id: 1
# or
person = Person[1]

person现在包含所有相关产品(DataMapper 为您完成所有连接工作),
您只需要获取/列出它们:

products = person.products order: :name.asc

关于(cost_price - selling_price) as profit
您可以在Person模型中添加一个方法,如下所示:

class Person
  # ...

  def profit
    cost_price - selling_price
  end
end

迭代人员/产品:

Person.each do |person|
  puts person.name
  puts " Profit: #{person.profit}"
  puts " Products:"
  person.products.all(order: :name).each do |product|
    puts "  #{product.name}"
  end
end
于 2012-11-21T11:00:30.970 回答