[ruby-it] Chiamare un metodo da un altro controller
Pietro Giorgianni
giorgian a gmail.com
Gio 20 Ago 2009 18:32:53 CEST
Il giorno 20 agosto 2009 18.16, Nicola Nico<theonenkl a gmail.com> ha scritto:
> Il controller A è uno UsersController che gestisce gli utenti
> registrati. In particolare consente di recuperare una
> password smarrita: se uno vuole recuperarla, seguendo il link su una
> mail, vorrei che effettuasse il login in automatico (un'azione in
> UsersController) e venisse rediretto a edit di Users.
>
> Il pallino mi è venuto quando pensavo a come creare una sessione da
> UsersController, senza fare del lavoro che dovrebbe essere fatto da
> SessionsController e senza spostare il tutto nella sopraclasse per
> mantenere le cose separate.
>
> Leggendo le vostre risposte mi viene in mente di mettere un link ad
> un'azione in SessionsController nella mail, che fa un redirect ad
> un'azione di UsersController (edit). Avete altre idee?
credo di aver capito il problema. una soluzione consiste nello
spostare gran parte della logica per la creazione di una sessione da
SessionsController a un model, ad esempio Session (che sia basato su
ActiveRecord o no non ha importanza).
l'idea sarebbe:
# controllers/sessions_controller.rb
class SessionsController < ApplicationController
...
def create
... # eventuali controlli vari
session = Session.new params[:session]
... # altro
end
...
end
# controllers/users_controller.rb
class UsersController < ApplicationController
...
def un_action_che_vuole_creare_una_session
...
session = Session.new dativari
...
end
...
end
# models/session.rb
class Session
def initialize datinecessari
... # qui avviene quello che deve avvenire
end
end
in generale è preferibile spostare quanta più logica possibile dal
controller al (ai) model.
alcuni esempi (che per me sono stati) illuminanti:
http://railscasts.com/episodes/119-session-based-model
http://railscasts.com/episodes/121-non-active-record-model
pietro
More information about the Ml
mailing list