ActiveRecord has_many relazione impedice orfano oggetto appena creato
-
08-10-2019 - |
Domanda
Supponiamo che io sono un modello di commento che belongs_to un modello Post.
Voglio fare in modo che la creazione di una nuova istanza Commento (sia per nuove, creare, find_or_create_by_x, ecc) non riuscirà (preferibilmente sollevare un'eccezione) a meno che il messaggio viene impostato immediatamente (sia facendola passare come un parametro o facendo riferimento sempre il palo durante la creazione di un commento, ad esempio post.comments.new o post.comments.create).
Io voglio fare questo perché voglio impostare alcuni valori di default nell'oggetto commento che si basano sul post ... quindi le esigenze postale di riferimento da subito valido.
Qual è il modo migliore per ottenere questo risultato? Grazie.
Soluzione
I pensare in modo che questo lavoro con new
bisogna farlo in after_initialize
:
def after_initialize
raise "no Post" unless post
end
sembra eccessivo però, dal momento che deve essere eseguito ogni volta che un commento viene creata un'istanza. Direi test di scrittura che assicurano i valori di default vengono impostati correttamente.
Altri suggerimenti
vorrei aggiungere una convalida nel modello Commento in questo modo:
class Comment < ActiveRecord::Base
validates_presence_of :post_id
end
Quindi creare nuovi commenti utilizzando:
@post = Post.find(params[:post_id])
@post.comments.create(params[:comment])