ускоренная загрузка для to_json включает

#ruby-on-rails #ruby-on-rails-3

#ruby-on-rails #ruby-on-rails-3

Вопрос:

Мне нужно отобразить некоторый JSON на основе моей модели, и мне нужно включить некоторые связанные модели. Вот мой код для этого.

   def validate_candidate_id 
    matches = User.where(:wca_id => params[:wca_id])
    if matches.any?
      respond_to do |format|
        format.html { redirect_to user_url(matches.first) }
        format.json { render :json => matches.first.to_json(:include => {:candidate_results => {:include => [:checklist_item_results, :assessment]}}) }
      end
    else
      respond_to do |format|
        format.html { render :text => "Invalid ID" }
        format.json { render :json => {}.to_json }
      end
    end
  end
  

Результат. однако, является ли что-то вроде этого:

 {"user":{"admin":true,"email":"charlie@naturalguides.com","evaluator":true,"first_name":"Charlie","id":1,"last_name":"Mezak","wca_id":"999999","candidate_results":[{"id":5,"checklist_item_results":[{"id":45},{"id":46},{"id":47},{"id":48},{"id":49},{"id":50},{"id":51},{"id":52},{"id":53},{"id":54},{"id":55}],"assessment":{"id":1}}]}}
  

Как вы можете видеть, во всех связанных моделях отсутствуют их атрибуты. Включены только их идентификационные ключи. Я предполагаю, что это связано с быстрой загрузкой, что мне нужно каким-то образом загрузить эти записи в память, чтобы все их содержимое было включено в to_json, но как это сделать?

Спасибо!

Ответ №1:

Я решил проблему, используя as_json в моей модели. Я использовал to_json, который давал мне неполные результаты. Из того, что я только что прочитал, кажется, что as_json является предпочтительным методом для этого, но я никогда даже не слышал об этом!

Ответ №2:

Вы пробовали использовать функцию ActiveRecord includes, т.Е.

 User.where(:wca_id => params[:wca_id]).includes(:candidate_results => [:checklist_item_results, :assessment])