Ho un'app che modella una casa. La casa ha molte stanze, stanze con molte luci e piccoli elettrodomestici, ecc. Ho anche un controller chiamato Calcolatrice, ovvero l'accesso all'app. I dati vengono aggiunti alla casa (e alle sue stanze) utilizzando il controller Calcolatrice. Quindi viene generato un rapporto, che si trova in app/views/calculator/report.html.erb.Dove dovrebbe andare la logica di calcolo in un'app Rails?
La mia domanda è dove dovrebbero andare tutti i calcoli e la logica per il rapporto? Attualmente ho tutto nella vista, con alcune cose in calculator_helper. Normalmente questo andrebbe nel modello, giusto? Ma il calcolatore non ha un modello che è stato generato. Qual è lo standard per questo?
Ecco il controller della calcolatrice.
class CalculatorController < ApplicationController
def index
end
def save_house
@house = House.new(params[:house])
respond_to do |format|
if @house.save
format.html { render :action => 'add_rooms', :id => @house }
format.xml { render :xml => @house, :status => :created, :location => @house }
else
format.html { render :action => 'index' }
format.xml { render :xml => @house.errors, :status => :unprocessable_entity }
end
end
end
def add_rooms
@house = House.find(params[:id])
@rooms = Room.find_by_house_id(@house.id)
rescue ActiveRecord::RecordNotFound
logger.error("Attempt to access invalid house #{params[:id]}")
flash[:notice] = "You must create a house before adding rooms"
redirect_to :action => 'index'
end
def add_room
@room = Room.new(params[:room])
@house = @room.house
respond_to do |format|
if @room.save
flash[:notice] = "Room \"#{@room.name}\" was successfully added."
format.html { render :action => 'add_rooms' }
format.xml { render :xml => @room, :status => :created, :location => @room }
else
format.html { render :action => 'add_rooms' }
format.xml { render :xml => @room.errors, :status => :unprocessable_entity }
end
end
rescue ActiveRecord::RecordNotFound
logger.error("Attempt to access invalid house #{params[:id]}")
flash[:notice] = "You must create a house before adding a room"
redirect_to :action => 'index'
end
def report
flash[:notice] = nil
@house = House.find(params[:id])
@rooms = Room.find_by_house_id(@house.id)
rescue ActiveRecord::RecordNotFound
logger.error("Attempt to access invalid house #{params[:id]}")
flash[:notice] = "You must create a house before generating a report"
redirect_to :action => 'index'
end
end
Mostraci la tua classe di Calcolatore. –
Mi piace la risposta di James. Un'altra domanda che penso dovresti chiederti è perché ti stai allontanando dalla convenzione: perché il controller della calcolatrice gestisce cose che apparentemente appartengono al controller House? Non sto dicendo che tu stia sbagliando, sto solo dicendo che vale la pena di riflettere. –
Buon punto, Andy. Ryan, prendi i MODELLI prima di iniziare a preoccuparti dei controller e delle visualizzazioni. Utilizzando questo approccio, potresti scoprire che il luogo corretto per tutti i calcoli è il modello di casa. –