Active has_many Beziehung verwaiste verhindern neu erstellte Objekt
-
08-10-2019 - |
Frage
Angenommen, ich einen Kommentar Modell habe, dass belongs_to einen Beitrag Modell.
Ich will es machen, so dass die Schaffung einer neuen Kommentar-Instanz (ob durch neue, erstellen, find_or_create_by_x, etc.) fehl (vorzugsweise eine Ausnahme auslösen), es sei denn die Post sofort eingestellt wird (entweder im als einen vorübergehenden Parameter oder durch immer Referenzierung der Post wenn Ihr einen Kommentar erstellen, zB post.comments.new oder post.comments.create).
Ich möchte, dies zu tun, weil ich einige Standardwerte im Kommentar Objekt festlegen möchten, die auf dem Post basieren ... so die Post Referenz Bedarf sofort gültig.
Was ist der beste Weg, dies zu erreichen? Danke.
Lösung
ich glaube, damit diese an die Arbeit mit new
Sie es in after_initialize
zu tun haben:
def after_initialize
raise "no Post" unless post
end
scheint übertrieben, obwohl, da diese jedes Mal, um einen Kommentar zu laufen hat instanziiert wird. Ich würde schreiben Tests sagen, dass die Standardeinstellung gewährleisten werden in geeigneter Weise eingestellt wird.
Andere Tipps
Ich würde eine Validierung in Ihrem Kommentar Modell hinzufügen wie folgt:
class Comment < ActiveRecord::Base
validates_presence_of :post_id
end
Dann neue Kommentare erstellen mit:
@post = Post.find(params[:post_id])
@post.comments.create(params[:comment])