2017-08-18 6 views
0

Nouveauté de Sequel et de SQL en général, alors faites comme moi. J'utilise le plugin many_through_many de Sequel et je récupère resources qui sont indirectement associés avec tasks à groups, via une table de jointure groups_tasks et une table de jointure groups_resources. Puis, quand je fais une recherche task.resource sur un ensemble de données Task je reçois des objets de ressources en Ruby, comme ceci:Récupération d'enregistrements et manipulation en tant qu'objets Ruby

>>[#<Resource @values={:id=>2, :group_id=>nil, :display_name=>"some_name"}>, #<Resource @values={:id=>3, :group_id=>nil, :display_name=>"some_other_name"}>] 

Maintenant, je veux être en mesure d'ajouter une nouvelle variable d'instance, schedule à ces objets de ressources et y effectuer des travaux dans Ruby. Cependant, chaque fois que je fais une recherche task.resources pour chaque tâche, Sequel apporte des ressources des objets pour ruby ​​comme différents objets à chaque fois des ressources (ce qui est logique), en dépit d'être le même enregistrement dans la base de données:

>> 
"T3" 
#<Resource:0x007fd4ca0c6fd8> 
#<Resource:0x007fd4ca0c6920> 
#<Resource:0x007fd4ca0c60d8> 
#<Resource:0x007fd4ca0c57a0> 


"T1" 
#<Resource:0x007fd4ca0a4c08> 
#<Resource:0x007fd4ca097f58> 
#<Resource:0x007fd4ca097b48> 


"T2" 
#<Resource:0x007fd4ca085ba0> 
#<Resource:0x007fd4ca0850d8> 

I Je voulais juste mettre un setter dans class Resource et faire resource.schedule = Schedule.new, mais comme ils sont tous différents objets, chaque ressource va avoir une tonne d'horaires différents. Quel est le moyen le plus simple de manipuler ces objets de ressources côté client, mais de conserver leurs associations de tâches que je interroge depuis le serveur?

+0

Manipulez-les embaucher? D'une manière qui rend ces manipulations visibles à tous les objets qui ont la même rangée associée? –

+0

@DaveNewton oui, exactement. Si je crée de nouveaux objets dans Ruby en interrogeant la même chose à partir de la ligne dans ma base de données, ce serait génial s'ils étaient le même objet dans Ruby-land. Là encore, je vais faire de nombreux hits redondants dans la base de données, alors peut-être que ce n'est pas la bonne façon de procéder? – Davigor

+0

Pourquoi ont-ils besoin d'être le même objet? L'état de partage conduit généralement à des problèmes. Quelle est votre préoccupation sous-jacente? –

Répondre

0

Si je comprends bien votre question, vous voulez récupérer des objets Resource puis manipuler un attribut nommé schedule. Je ne suis pas très familier avec Sequel, mais en regardant par-dessus les docs, cela semble fonctionner de la même manière qu'ActiveRecord.

  1. Définissez votre variable d'instance (j'imagine utiliser quelque chose comme attr_accessor :schedule sur la classe de ressources).

  2. Stockez les enregistrements dans une variable, vous travaillerez avec la même instance à chaque fois, plutôt que la nouvelle instance Sequel renvoie.

+0

C'est juste le genre d'approche dont j'avais besoin, merci! – Davigor