0

人物表

-------------------------------------------------- ----------
ID | 名前 | cost_price | 販売価格 | 商品ID |
-------------------------------------------------- ----------
 1人1 10000 20000 1
 2人2 20000 30000 2
 3人3 30000 40000 3

製品表

--------------
ID | 名前 |
--------------
 1 製品1
 2 製品2
 3 商品3
私のSQLクエリ
名前 (cost_price - Selling_price) を Profit, products.name として選択します。
人から
person.product_id = products.id の内部結合製品
ここで、product.id = 1
product.name asc で並べ替え

これを Data Mapper で複製できませんでした。これは私が試したものです (モデルとその関連付けを適切に定義しました)。

Person.all(

# 同等の SQL 結合
  Person.product.id => 1、  

# products.name 定義方法は? 
# また、直接 cost_price-selling_price を利益または
# 結果セットをモデル化する必要がありますか?
  :fields => ['id', 'name', 'cost_price', 'selling_price']

# product.name で注文するには?
  :注文 => []
)
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

Persons/Products を反復処理するには:

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 に答える