Die folgende Funktion funktioniert gut aber Wenn ein Datensatz nicht UTF-8-Zeichen enthalten, gibt es 500 Fehler.Wie erstellt man eine Massenoperation Transaktionen in Ruby on Rails
Kann ich die Transaktion hier für den Massenbetrieb verwenden, so dass entweder alle Datensätze gespeichert werden oder keiner von ihnen?
Ich habe versucht, mit verschiedenen Codierung beheben Problem wie auf Stackoverflow erwähnt, aber das funktioniert nicht.
def convert_save(model_name, csv_data, field_name=nil)
target_model = model_name.classify.constantize
csv_file = csv_data.read
row_headers={}
counter=0;
all_recs=[];
#Thread.new do
CSV.parse(csv_file) do |row|
if counter==0
temp=row
row_headers = Hash[temp.map.with_index.to_a]
counter +=1
next
end
#start fetch row and put into active record object
unless row[row_headers["name"]].nil?
temp={}
temp_time={}
for name in [:business_type_id, :user_id, :name, :country_id, :latitude, :longitude, :free_shipping]
temp[name] = row[row_headers[name.to_s]]
end
for name in [:homepage, :telephone, :email, :address, :facebook, :twitter, :google, :instagram, :pinterest, :ship_details]
temp[name] = row[row_headers[name.to_s]] ||= ""
end
for name in [:category_ids, :style_ids, :filter_ids, :shipping_country_ids]
temp[name] = row[row_headers[name.to_s]].try(:split, ",") unless row_headers[name.to_s].nil?
end
for name in [:monday, :tuesday, :wednesday, :thursday, :friday, :saturday, :sunday, :public_holiday]
temp_time[name.to_s] = row[row_headers[name.to_s]] ||= ""
end
temp_time["appointment_only"] = row[row_headers["appointment_only"]]
temp["business_timing_attributes"] = temp_time
all_recs.push(temp)
end
end
Business.create(all_recs)
ActiveRecord::Base.connection.close
end
#end
end
Es scheint, als ob Sie Fragen über Transaktionen sowie ein Codierungsproblem stellen. Sie sollten versuchen, jeweils eine Frage zu stellen. –
Das Hauptmotiv der Transaktion besteht darin, einen Codierungsfehler zu vermeiden. Wenn irgendein Problem auftritt, um den partiellen Datensatz zu speichern, um ein Problem zu erzeugen. Ich habe bis jetzt keine bessere Lösung für die Kodierung gefunden. –
Dies scheint wie ein [XY-Problem] (http://xyproblem.info/). Wenn Sie Codierungsfehler bekommen und andere SO-Fragen Ihnen nicht geholfen haben, sollten Sie eine Frage stellen, die das Problem beschreibt, einschließlich der genauen Fehlermeldungen, die Sie erhalten. –