2017-09-27 2 views
1

J'ai une relation has_many typique:Rails meilleure façon de charger les enregistrements enfants sur un objet parent existant

class Effort < ApplicationRecord 
    has_many :split_times 
end 

En diverses circonstances, je me retrouve avec un effort instancié et je créer de nouveaux split_times avec split_time.effort_id == effort.id. Quand je veux passer l'objet d'effort à un autre service, je dois m'assurer que les split_times de l'effort ne sont pas périmés, et je peux le faire avec effort.reload.

Mais si je veux que les split_times à charger sur l'effort, je me retrouve en train de faire:

effort = Effort.where(id: effort.id).eager_load(:split_times).first 

Il doit y avoir une meilleure façon ... ne pas là?

+1

pas vraiment sûr de ce que vous voulez en venir. Pourquoi doit-il y avoir un meilleur moyen? –

+1

Consultez http://guides.rubyonrails.org/association_basics.html#bi-directional-associations et http://guides.rubyonrails.org/association_basics.html#has-many-association-reference (en particulier collection.create) . Peut-être lire la page entière sur plusieurs fois ... –

+0

Aussi, regardez scope ou default_scope si cette aide. –

Répondre

0

puisque vous avez accès à l'objet effort peut-être que vous pouvez faire

@effort = #effort_object 
split_times = @effort.split_times 
=> #returns array of data 

espérons que cette aide