Alors disons que vous avezJe pense que cela doit être refactorisé - de l'aide? modélisation Ruby
line_items
et line_items appartenez à une marque et un modèle
une marque a de nombreux modèles et postes
un modèle appartient à une marque
Pour l'exemple nu idée LineItem.new (: make => "Apple",: modèle => "Mac Book Pro")
Lors de la création d'un objet LinteItem, vous voulez une zone text_field pour une marque et un modèle. Les marques et les modèles ne devraient pas exister plus d'une fois.
J'utilisé la mise en œuvre suivante:
before_save :find_or_create_make, :if => Proc.new {|line_item| line_item.make_title.present? }
before_save :find_or_create_model
def find_or_create_make
make = Make.find_or_create_by_title(self.make_title)
self.make = make
end
def find_or_create_model
model = Model.find_or_create_by_title(self.model_title) {|u| u.make = self.make}
self.model = model
end
Cependant, l'utilisation de cette méthode signifie que je dois validateurs personnalisés au lieu d'un #validates_presence_of: faire en raison des associations qui se produisent hors un attribut virtuel
validate :require_make_or_make_title, :require_model_or_model_title
def require_make_or_make_title
errors.add_to_base("Must enter a make") unless (self.make || self.make_title)
end
def require_model_or_model_title
errors.add_to_base("Must enter a model") unless (self.model || self.model_title)
end
Meh, ça commence à être nul. Maintenant où vraiment suce édite avec des formes. Considérant que mes champs de formulaire sont partiels, mon édition rend le même formulaire que le nouveau. Cela signifie que: make_title et: model_title sont vides sur le formulaire.
Je ne suis pas vraiment sûr de la meilleure façon de rectifier le problème immédiatement ci-dessus, ce qui a été le dernier tournant sur moi en pensant que cela doit être entièrement refactorisé.
Si quelqu'un peut fournir des commentaires, ce serait génial.
Merci!