2011-11-16 17 views
5

Ho un modello Search e controller. La logica aziendale è che se la parola chiave dell'utente corrisponde esattamente al numero di modello di un prodotto, reindirizzali alla pagina del prodotto.Buone pratiche - Reindirizzamento nei modelli? - Rails 3.1

In questa situazione, devo semplicemente eseguire il reindirizzamento dall'interno del modello (dove risiede già la maggior parte della logica)?

O dovrei restituire un flag o qualcosa al controller in modo che possa gestire il reindirizzamento?

risposta

9

L'oggetto del modello non può mai eseguire un reindirizzamento. La logica dell'applicazione è compito del controllore, quindi il controllore dovrebbe chiedere all'oggetto del modello (come risultato di una richiesta) se il prodotto corrisponde a un numero di modello e quindi il controller esegue il reindirizzamento. L'oggetto del modello non dovrebbe sapere nulla sul controller o sulle viste. Questo fa parte di "Model-View-Controller concept" implementato da Rails.

Rails implementa il modello come ActiveRecord pattern, quindi è corretto che l'oggetto modello sia responsabile per il database e che includa la ricerca nel database. Guarda le numerose opzioni disponibili nello Rails Guides for ActiveRecord Queries per vedere cosa rientra nella responsabilità degli oggetti del modello.

+0

È ok avere una funzione run_search nel modello che esegue tutte le ricerche sul db (su più modelli) o è meglio che il controller esegua anche quello? – Jacob

+0

Espanderò la mia risposta. – mliebelt

4

Ricordate sempre pattern MVC: MVC in Rails

modello non deve prendere cura di reindirizzamento o qualche altra roba che legato al controller. Lasciare il reindirizzamento nel controller.