2011-07-04 2 views
0

Je commence un petit projet Rails pour enregistrer les périphériques iOS ici au bureau, juste pour apprendre le cadre, et je l'ai rencontré le problème suivant:Model.includes (propriété): apparemment ne fonctionne pas

Etant donnés deux modèles « appareil » et « propriétaire » avec les associations suivantes:

class Owner < ActiveRecord::Base 
    has_many :devices 
end 

class Device < ActiveRecord::Base 
    belongs_to :owner 
    belongs_to :os_version 
    belongs_to :device_type 
end 

sont Schemas:

CREATE TABLE "devices" (
    "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
    "uuid" varchar(255), 
    "imei" varchar(255), 
    "device_type_id" integer, 
    "label" varchar(255), 
    "os_version_id" integer, 
    "owner_id" integer, 
    "created_at" datetime, 
    "updated_at" datetime, 
    "serial" varchar(255) 
); 
CREATE TABLE "owners" (
    "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
    "first_name" varchar(255), 
    "last_name" varchar(255), 
    "username" varchar(255), 
    "created_at" datetime, 
    "updated_at" datetime 
); 

Je suis en train d'obtenir un contrôleur pour aller chercher avec impatience un propriétaire avec toutes ses Devic es, j'ai donc essayé les suivantes:

class OwnerController < ApplicationController 

    def list 
    @owners = Owner.includes(:devices).all 
    respond_to do |format| 
     format.xml { render :xml=>@owners } 
     format.any(:json, :html) { render :json => @owners } 
    end 
    end 
end 

Le contrôleur énumère avec succès tous les propriétaires, mais les appareils sont nulle part.

J'ai également essayé d'utiliser l'étendue par défaut dans la classe Owner, mais toujours pas bon. Lorsque vous utilisez rails console, toute requête utilisant Owner.include(:devices) ne parvient pas à renvoyer d'informations sur le périphérique, mais Owner.first.devices a tout ce qu'il contient.

Des idées sur ce que je pourrais faire de mal?

Merci!

Répondre

3

Vous devez spécifier que votre XML et des vues JSON devraient inclure les associations dispositifs:

format.xml { render :xml => @owners.to_xml(:include => :devices) } 

Ou, dans Rails 3, pour rendre les choses un peu plus simple:

class OwnerController < ApplicationController 

    respond_to :html, :json, :xml 

    def list 
    @owners = Owner.includes(:devices).all 
    respond_with @owners, :include => :devices 
    end 

end 
+0

Merci, c'était fini! – Nico

3

AFAIK, la Les rendus XML et JSON ne rendent pas les associés par défaut.

Pour XML, vous devez définir explicitement les associations que vous voulez rendu:

format.xml { render :xml => @owners.to_xml(:include => :devices) } 

Le même principe (syntaxe différente) vaut pour le rendu JSON.

HTH

Questions connexes