Questo articolo è praticamente classico. Sì, dovresti attenersi all'architettura "Modelli grassi, magri controllori, viste stupide" a patto che i modelli abbiano senso come oggetti (e lo fanno quasi sempre).
Nel tuo caso, non sono veramente sicuro di come dovrebbe apparire il "modello" di output, ma diciamo che è una galleria. Quindi puoi creare un modello come questo:
class Gallery # no "< ActiveRecord" if don't work with database
attr_accessor :zip_file_path, :xml, :images
def initialize(params ={})
@zip_file_path = params[:zip_file_path]
@xml = nil
@images = []
@output = nil # model: html code, path to file...
end
def generate_model
unzip_file! # populates @xml and @images
transform_xml! # creates model into @output
@output
end
def unzip_file!
...
end
def transform_xml!
...
end
end
È solo un progetto approssimativo, potresti volerlo rendere più orientato alla funzione (@xml, @images = unzip_file (@zip_file_path)) ecc.
Il controllore agirà quindi da mediatore tra il modello e le visualizzazioni / utente:
class GalleriesController < ApplicationController
def new()
# display upload form for zip_file
end
def create()
# check input here, or leave it to model validations
@output = Gallery.new(params).generate_model
end
end