import_results = { success: 0, failed: 0, errors: [] }
ActiveRecord::Base.transaction do
- import_posts(data['posts'], import_results) if data['posts'].is_a?(Array)
- import_bookmarks(data['bookmarks'], import_results) if data['bookmarks'].is_a?(Array)
+ data.each do |post_data|
+ next unless post_data.is_a?(Hash)
+
+ # Convert string IDs to integers
+ post_data['id'] = post_data['id'].to_i if post_data['id'].present?
+
+ post = Post.new(
+ id: post_data['id'],
+ title: post_data['title'],
+ slug: post_data['slug'],
+ content: post_data['content'],
+ excerpt: post_data['excerpt'],
+ tags: post_data['tags'],
+ url: post_data['url'],
+ post_type: post_data['post_type'],
+ published_at: post_data['published_at']
+ )
+
+ if post.save
+ import_results[:success] += 1
+ else
+ import_results[:failed] += 1
+ import_results[:errors] << "Error saving post #{post_data['id']}: #{post.errors.full_messages.join(', ')}"
+ end
+ end
end
if import_results[:failed] > 0
flash[:warning] = "Import partially succeeded. Successful: #{import_results[:success]}, Failed: #{import_results[:failed]}. Check the logs for detailed errors."
+ logger.error "Import Errors: #{import_results[:errors].join("\n")}"
else
flash[:notice] = "Data imported successfully. Total items: #{import_results[:success]}"
end
rescue JSON::ParserError
flash[:alert] = "Invalid JSON file."
+ logger.error "JSON Parse Error"
rescue => e
flash[:alert] = "Error importing data: #{e.message}"
logger.error "Import Error: #{e.message}\n#{e.backtrace.join("\n")}"