Почему опция включения to_json в Rail2 возвращает пустые хэши? - PullRequest
0 голосов
/ 29 августа 2011

Я пытаюсь использовать механизм сериализации модели to_json в Rails (2) для передачи некоторых данных из связанных моделей.В качестве руководства я ссылаюсь на следующие по существу идентичные URL-адреса документации:

Вот некоторые из соответствующихкод модели:

class WorkEffortAssignment < ActiveRecord::Base
  belongs_to :work_effort
  belongs_to :assigned_to, :polymorphic => true
  belongs_to :assigned_by, :polymorphic => true

Вот код контроллера, я просто пытаюсь получить дамп JSON для целей начального тестирования:

def dump_work_effort_assignments
    WorkEffort.include_root_in_json = false
    all_assignments = WorkEffortAssignment.all
    options = {:include => [:work_effort, :assigned_to, :assigned_by], :only => [:work_effort_id, :assigned_to_id, :assigned_by_id]}
    ext_json = "{data:#{WorkEffortAssignment.all.to_json(options)}}"
    render :inline => ext_json
end

Вот первая запись данных Json с пустымхэши для work_effort, assign_to и assign_by:

{data:[{"assigned_to":{},"work_effort_id":"9","assigned_to_id":3,"assigned_by":{},"work_effort":{},"assigned_by_id":3}, //etcetera

Но ниже моя консольная сессия, показывающая ассоциации, которые я хотел бы представить в моем Json.Так что же я делаю не так в своем контроллере, когда пытаюсь указать опцию включения для to_json, чтобы я мог легко отправлять связанные данные модели обратно в браузер.Заранее спасибо

>> assignment = WorkEffortAssignment.first
=> #<WorkEffortAssignment id: 1, assigned_at: nil, assigned_from: nil, assigned_
thru: nil, unassigned_at: nil, assigned_to_id: 3, assigned_to_type: "Party", ass
igned_by_id: 3, assigned_by_type: "Party", created_at: nil, updated_at: nil, wor
k_effort_id: "9">
>> assignment.work_effort
=> #<WorkEffort id: 9, description: "Software Architecture Document", type: nil,
 started_at: nil, finished_at: nil, projected_completion_time: nil, actual_compl
etion_time: nil, created_at: "2011-08-18 13:39:30", updated_at: "2011-08-25 13:3
9:30", facility_id: nil, facility_type: nil, work_effort_record_id: nil, work_ef
fort_record_type: nil, projected_cost_id: nil, actual_cost_id: nil, parent_id: n
il, lft: 1, rgt: 2>
>> assignment.assigned_to
=> #<Party id: 3, description: "George Jempty", business_party_id: 2, business_p
arty_type: "Individual", list_view_image_id: nil, enterprise_identifier: nil, cr
eated_at: "2011-08-29 14:21:41", updated_at: "2011-08-29 14:21:41">
>> assignment.assigned_by
=> #<Party id: 3, description: "George Jempty", business_party_id: 2, business_p
arty_type: "Individual", list_view_image_id: nil, enterprise_identifier: nil, cr
eated_at: "2011-08-29 14:21:41", updated_at: "2011-08-29 14:21:41">

1 Ответ

1 голос
/ 29 августа 2011

The: единственный спецификатор, который у вас есть, выбрасывает его. Следующее будет включать дочерние объекты:

def dump_work_effort_assignments
    WorkEffort.include_root_in_json = false
    all_assignments = WorkEffortAssignment.all
    options = {:include => [:work_effort, :assigned_to, :assigned_by]}
    ext_json = "{data:#{WorkEffortAssignment.all.to_json(options)}}"
    render :inline => ext_json
end

... но не будет отфильтровывать атрибуты родителя. Если вы хотите это сделать, может быть проще создать хеш и преобразовать его в json:

def dump_work_effort_assignments
    data = WorkEffortAssignment.all.map {|wea| {
        :work_effort => wea.work_effort,
        :assigned_to => wea.assigned_to,
        :assigned_by => wea.assigned_by
    }}
    ext_json = "{data:#{data.to_json}}"
    render :inline => ext_json
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...