rails - comment rafraîchir une association après une sauvegarde
J'ai une catégorie avec une liste d'éléments. Les éléments ont une position et de la catégorie a d'une relation has_many :les objets, les :commande => "position". Lorsqu'un utilisateur met à jour une valeur de position, je veux voir sa position. Ma position est un flotteur pour permettre la navigation entre les nombres arrondis.
pos=item.category.items.map(&:id)
current_position=pos.index(id.to_i)
item.save # want to refresh the relationship here
pos_new=item.categoty.items.map(&:id)
# grabbing this since just accessing item isn't updated if positioning has changed
item_new=Item.find(id)
pos_new=item_new.category.items.map(&:id)
new_position=pos_new.index(id)
if current_position!=new_position
is_moved=true # sent back in JSON to propagate a dynamic change.
end
Ci-dessus fonctionne, mais il semble vraiment détaillé. Est-il un moyen pour moi de le dire, sur le point d'enregistrer que la catégorie de la relation doit être actualisé depuis l'ordonnance pourrait être changé?
source d'informationauteur timpone | 2012-10-01
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
item.reload
qui récupère à nouveau le modèle de la base de données et la prochaine fois que vous appelez une association, il récupère à nouveau.Pour un seul élément associations:
Pour d'autres associations:
http://guides.rubyonrails.org/association_basics.html#controlling-caching
Dans les anciennes versions de rails, avant de Rails 5, vous pourriez passer
true
à une association de la méthode en tant que premier paramètre pour la faire recharger:author.books(true)
.Rails 4 mise à jour de votre has_many/belongs_to objets associés pour vous quand ils changent, mais il ne sera pas ré-exécuter la requête qui signifie que, même si les articles de la catégorie.les articles seront mis à jour, ils ne seront pas dans l'ordre. Selon la taille de vos tables, vous pouvez utiliser ruby à l'ordre de la raison ou de l'utilisation de la catégorie.recharger pour obtenir dans l'ordre.
Voir le RailsGuides à http://guides.rubyonrails.org/association_basics.html et de regarder pour inverse_of