【问题标题】:Create JSON from 2 associated Datamapper models从 2 个关联的 Datamapper 模型创建 JSON
【发布时间】:2013-08-21 04:46:06
【问题描述】:

这是我的问题。 我有 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 的正确方法?

谢谢。

【问题讨论】:

    标签: ruby json ruby-datamapper


    【解决方案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
    

    它对我很有效。希望它会有所帮助。

    【讨论】:

      猜你喜欢
      • 2015-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多