Comment puis-je faire en sorte qu'au moins deux enregistrements d'options sont requis pour soumettre un produit?Rails attributs imbriqués: nécessitent au moins deux enregistrements
class Product < ActiveRecord::Base
belongs_to :user
has_many :options, :dependent => :destroy
accepts_nested_attributes_for :options, :allow_destroy => :true, :reject_if => proc { |attrs| attrs.all? { |k, v| v.blank? } }
validates_presence_of :user_id, :created_at
validates :description, :presence => true, :length => {:minimum => 0, :maximum => 500}
end
class Option < ActiveRecord::Base
belongs_to :product
validates :name, :length => {:minimum => 0, :maximum => 60}
end
Il devrait être assez simple avec une validation personnalisée. Quelque chose comme 'self.errors.add_to_base (" Deux options sont obligatoires ") sauf self.options.length> = 2' – Todd
merci qui a fonctionné! – morcutt
Si vous utilisez 'accept_nested_attributes_for' avec' allow_destroy: true' alors vous devez utiliser 'marked_for_destruction?' Avec l'association enfants pour trouver la longueur exacte des enfants, car il peut être possible lors de la soumission de forme certains objets ont été marqués '_destroy: true' pour la destruction après avoir sauvé l'objet. La longueur, la taille et le nombre ne fonctionneront pas parfaitement dans ce cas. Ce lien a une réponse parfaite. [link] (http://stackoverflow.com/a/28476834/4377172) –