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.

È stato utile?

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])
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top