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])

我可以从任务模型访问 project_id,但不知道如何从项目模型中为每个任务添加相应的项目名称。在 SQL 中,它看起来像 join:

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

您能否建议使用 Datamapper 方式而不是 SQL 来创建最终 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 回答