Ich habe Rake-Aufgaben, die Tausende von Datensätzen aus verschiedenen Quellen und Formaten importieren, und ich versuche, meinen Code nach dem Parsen auszutrocknen, wo sie gerade Modellaufzeichnungen mit dynamischen Suchern find_or_initialize_by_ * erstellen oder aktualisieren .Dynamisch gesetztes dynamisches Finder in Schienen
Im Wesentlichen möchte ich den * Abschnitt der find_or_initialize_by_ * -Methode übergeben können.
Hier ist ein Sudo-Code, um zu erklären, was ich erreichen möchte.
def create_or_update_record(*args)
model = args[0].classify.constantize
identifier = args[1]
attributes = args.extract_options!
XXX = identifier
record = model.find_or_initialize_by_XXX(identifier.to_sym => @identifier_value)
attributes.each do |attribute|
#set value of attribute here
end
record.save
end
Was ich dann von den Rake Aufgaben mit so etwas wie dies im Produkt Import ...
create_or_update_record('Product', 'product_id',{
"product_id" => "1",
"product_price" => "2.99"
})
und so etwas wie dies in der Kategorie Import ...
create_or_update_record('Category', 'category_id',{
"category_id" => "1",
"category_name" => "Gloves"
})
nennen würde
Ich vermute, ich muss die zugrunde liegende method_missing überschreiben und erweitern. Sieht aus diesem Blogpost, den ich gefunden habe, ziemlich kompliziert aus. http://blog.hasmanythrough.com/2006/8/13/how-dynamic-finders-work
dang! Ich brauche offensichtlich mehr Kaffee. Vielen Dank! Arbeitete perfekt. –