2017-08-21 3 views
0

Lats sagen, dass ich eine Beziehung haben:Vermeiden Sie Active Beziehung in Rails neu geladen werden

@active_posts = Post.where(active: true).limit(3) # returns 3 active posts, but there are much more then 3 

ich einige Mitglieder dieser Beziehung Dann ändern:

@active_posts.first.update active: false 
@active_posts.size # returns 3, but need 2 remaining 

Wie kann ich den Rest 2 aktiv werden Beiträge in dieser Beziehung? Wenn ich versuche, @active_posts zu durchlaufen, wird es von db neu geladen und den deaktivierten Post durch den aktiven ersetzt. Aber wie kann ich genau 2 aktive Beiträge von dieser Relation erhalten, die nach Deaktivierung der dritten übrig bleiben?

Antwort

0

Gebrauchbereich

class Post < ActiveRecord::Base 
    scope :actived, -> { where(active: true) } 
    scope :deactived, -> { where(active: false) } 
end 

@active_posts = Post.actived # returns 3 active posts 
@active_posts.first.update active: false 
@active_posts.reload 
@active_posts = Post.actived 
+0

Es ist kein Fall. Weil die letzte Anweisung wieder 3 aktivierte Posts zurückgibt (db hat mehr als 3 aktive Posts. Ich sollte mein Beispiel beheben. – Molfar

+1

add @ active_posts.reload nach Update-Anweisung –

+0

@Molfar leider ist Rails nicht so schlau. Es ist eine gute Angewohnheit, nicht anzurufen. neu laden und immer einen Bereich verwenden. –

Verwandte Themen