J'ai une application rails dans laquelle je souhaite remplir les champs et les associations d'un modèle via un téléchargement de fichier. L'utilisateur reçoit un formulaire avec un élément d'entrée de téléchargement de fichier, puis après avoir cliqué sur Soumettre, l'application Rails analyse le fichier et l'utilise pour créer un certain nombre d'autres modèles.Comment puis-je remplir un modèle d'activationecord (et ses associations) à partir d'un fichier téléchargé
Un exemple simplifié ressemblerait à ceci (à noter que par souci de concision celui-ci utilise paperclip pour le téléchargement de fichiers):
class Parent < ActiveRecord::Base
has_many :children, :class_name => 'Child'
has_attached_file :attachment
after_initialize do |parent|
File.open(attachment.path) do |file|
process(file)
end
end
private
def process(attachment_file)
# create some new children using the attachment, perhaps this?
attachment_file.each_line |line|
# note that the children can either be new or existing.
self.children << Child.find_or_initialize_by_message(:message => line)
end
end
end
class Child < ActiveRecord::Base
belongs_to :parent
end
Mais mon problème est que lorsque je sauve mon objet parent, il est des enfants n'épargnent pas . (J'utilise Rails 2.3.10 et Ruby 1.8.7)
Ce qui est étrange, c'est que cela fonctionne avec Rails 2.3.4, mais pas dans aucune version par la suite. Quelqu'un at-il de bonnes suggestions pour ce que je pourrais faire de mal? Ou une meilleure façon de réaliser la même chose?
Merci d'avance pour votre aide - cela me rend fou!
J'ai mis à jour mon exemple pour montrer le correctif suggéré par Krunal. – iainbeeston