1

これが私の質問です。関連する 2 つの Datamapper モデルがあります。

class Task
 include DataMapper::Resource
 property :id,           Serial
 property :date,         Date
 property :amount,       Float 

 belongs_to :project,   :required => true
end

class Project
 include DataMapper::Resource
 property :id,          Serial
 property :name,        String,  :required => true
 property :desc,        Text

 belongs_to :company
 has n, :tasks
end

私の目標は、タスクの日付、金額、およびプロジェクト名を含む JSON を作成し、project_id と一致させることです。現時点では、JSON 生成は次のようになっています。

Task.all.to_json(:only => [:date, :amount, :project_id])

Task モデルから project_id にアクセスできますが、各タスクの Project モデルからそれぞれのプロジェクト名を追加する方法がわかりません。SQL では、結合のように見えます。

select tasks.date, tasks.amount, projects.name from tasks
inner join projects
on tasks.project_id = projects.id;

SQLではなくDatamapperの方法を使用して、最終的なJSONを作成する正しい方法を提案できますか?

ありがとうございました。

4

1 に答える 1

1

問題の解決策を見つけました。ここにあります:

# create new structure to store merged result
Task_entry = Struct.new(:date, :amount, :pname)

# array to get results from database
all_task_items = Array.new

# run through result and fill the array with required data
Task.all.each do |task|
  task_item = Task_entry.new(task.date, task.amount, task.project.name)
  all_task_items << task_item
end
all_task_items.to_json # generate json

それは私にとってはうまくいきます。それが役立つことを願っています。

于 2013-08-31T07:45:37.447 に答える