2014-01-17 4 views
25

In Rails 3 kann man Dinge tun wie some_post.comments.append(some_comment) wo einige Posts eine Instanz eines Modells sind, das "has_many" Kommentare hat.Rails 4: Anhängen an eine "has_many" Relation ohne Speichern in DB

Das Problem, das ich in Rails 4 zugewandt habe, ist, dass die append Methode nun auf DB speichert (wie push und <<) und ich muss nur „anhängen“, ohne den angehängten Objekt an die DB zu speichern.

Wie erreichen wir das in Rails 4? Ich kann some_post.comments.build(some_comment.attributes) nicht verwenden, da ich die anderen Beziehungen, die bereits in der some_comment-Instanz vorhanden sind, beibehalten muss.

+0

Sie meinen, Sie brauchen, um einen Kommentar anhängen und dann eine Operation auf das übergeordnete Objekt durchführen, so dass Sie versuchen, sofort persistierenden den neuen Kommentar zu vermeiden? – amenadiel

Antwort

1

Sie könnten tun:

class Post < ActiveRecord::Base 

    has_many: comments, autosave: false 

    ... 
end 

Dann < < wird nur anhängen und nicht speichern.

+1

Das hatte für mich keine Verhaltensänderung. –

35

Es ist seltsam schwierig, dies in Rails elegant zu tun. Dies ist der sauberste Weg, die ich gefunden habe:

post.association(:comments).add_to_target(comment) 
Verwandte Themen