2009-12-27 7 views
1

Je ne trouve pas le moyen de récupérer uniquement les champs de modèle nécessaires dans un certain contexte. Disons que j'ai un énorme modèle qui a environ 30 champs (propriétés). Mais dans un but de recherche, je n'ai besoin que de deux d'entre eux.Comment extraire uniquement des champs de modèle spécifiés avec DataMapper?

Exemple:

class Foo 
    include DataMapper::Resource 

    property :id, Serial 
    property :title, String, :length => 256 
    property :description, Text 
    property :url, String, :length => 4096 
    property :city, String, :length => 64 
    property :country, String, :length => 64 
    property :state, String, :length => 64 
    property :created_at, Time 
    property :updated_at, Time 
    property :expires_at, Time 
    ... etc fields ... 
end 

Ainsi, pour la fin avant (application Web) La plupart de ces champs sont utilisés. Mais pour la recherche j'ai besoin de disons seulement: titre,: ville, état. Son facile à interroger des données, comme ça

items = Foo.all(:title.like => 'Some stuff') 

Et puis j'ai besoin d'emballer les données récupérées dans JSON. Pour autant que je sache, il existe un module pour DataMapper appelé dm-serialize qui gère toutes ces opérations.

Enfin, je le paquet pour la sortie:

response = {:error => 0, :count => items.length, :data => items} 
response.to_json 

Mais les éléments de sortie ont tous les champs alors que je dois obtenir seulement certains d'entre eux. Pour une raison quelconque, le chargement paresseux ne fonctionne pas.

La question est: Comment spécifier les champs de modèle que vous allez sélectionner?

Répondre

7
Foo.all(:fields=>[:title, :city, :state]) 
4

Vous avez trébuché là-dessus aussi.
En outre, fournissez l'option :only à la méthode #to_json, sinon il chargera paresseux ceux qui n'ont pas encore été récupérés.

items.to_json(:only => [:title, :city, :state]) 

Vous devez générer la réponse json vous-même; sinon, des fuites paresseuses des autres champs se produiront.

+0

merci! Je me demandais comment ne pas forcer la charge paresseuse lorsque vous utilisez to_json – vitorbal

Questions connexes