¿Cómo hacer correctamente esto?


#1

Veréis, cada vez que un usuario se registra en mi aplicación deseo crear
(de forma aleatoria) un club y múltiples jugadores para dicho club),
tenía pensado hacer esto:

(En mi controlador Users)

def create
@user = User.new(params[:user])

respond_to do |format|
  if @user.save
    Club.create_club(user) #aquí está mi duda
    flash[:notice] = "Account #{@user.login} registered!"
    format.html { redirect_back_or_default home_path}
    format.xml  { render :xml => @user, :status => :created,

:location => @user }
else
format.html { render :action => “new” }
format.xml { render :xml => @user.errors, :status =>
:unprocessable_entity }
end
end
end

¿Es correcto crear el equipo para ese usuario de esa forma?


#2

Carlos Belizón wrote:

¿Es correcto crear el equipo para ese usuario de esa forma?

Corrijo mi idea:

def create
@user = User.new(params[:user])
@user.club = Club.create_random #duda

respond_to do |format|
  if @user.save
    flash[:notice] = "Account #{@user.login} registered!,
                      Club: #{@user.club.name}"
    format.html { redirect_back_or_default home_path}
    format.xml  { render :xml => @user, :status => :created, 

:location => @user }
else
format.html { render :action => “new” }
format.xml { render :xml => @user.errors, :status =>
:unprocessable_entity }
end
end
end

Mi duda surge debido a que no sé si es correcto crear un modelo distinto
dentro de la acción del controlador de otro recurso.


#3

Hola a todos,

Prodias hacerlo con un after_create en User

Carlos Belizón escribió:

:unprocessable_entity }
end
end
end

Mi duda surge debido a que no sé si es correcto crear un modelo distinto
dentro de la acción del controlador de otro recurso.

Si es la logica de la aplicacion por que no?

Un saludo.


#4

cartuchoGL wrote:

Hola a todos,

Prodias hacerlo con un after_create en User

Carlos Belizón escribió:

:unprocessable_entity }
end
end
end

Mi duda surge debido a que no sé si es correcto crear un modelo distinto
dentro de la acción del controlador de otro recurso.

Si es la logica de la aplicacion por que no?

Un saludo.

Vale, es que no sabía si era más correcto usar un observer, de ahí mi
pregunta :). Aunque bueno, he hecho un cambio de diseño sobre la marcha
y me he dado cuenta que es mejor asignar un club al usuario cuando
acaben todas mis ligas y se hayan hecho las promociones de ascenso y
descenso, por lo que, teniendo en cuenta que la última acción antes de
crear temporadas nuevas es esta:

def promotion
seasons = Season.current_seasons
if Season.finished?(seasons)
begin
seasons = Season.promotion_and_relegate(League.current_seasons,
Season::NUM_PROMOTIONS)
seasons.each {|x| x.save!}
respond_to do |format|
flash[:notice] = “New seasons created”
format.html {redirect_to ‘/admin/leagues’}
format.xml {head :ok}
end
rescue
respond_to do |format|
flash[:error] = “Problems createing the new leagues with
promotions”
format.html {redirect_to ‘/admin/leagues’}
format.xml {head :error}
end
end
else
respond_to do |format|
flash[:error] = ‘You can’t promotion the leagues’
format.html {redirect_to ‘admin/leagues’}
format.xml {head :error}
end
end
end

Cómo puedo hacer que cada vez que se ejecute esa acción se ejecute lo
siguiente:

class League < ActiveRecord::Base
self.create_new_leagues_with_users_without_club
## Código
end
end


#5

2009/5/21 Carlos Belizón removed_email_address@domain.invalid

Carlos Belizón wrote:

¿Es correcto crear el equipo para ese usuario de esa forma?
def create
@user = User.new(params[:user])
@user.club = Club.create_random #duda

Yo hubiese tirado por un observer.
Todo lo que tenga que ver con relacionar modelos en la creación de una
instancia me gusta más hacerlo así. Y te explico el porqué.

Si algún día, en alguna tarea rake, o en algún entorno raro, no quiero
hacerlo, y quiero crear uno, podría desactivar los observers y no me
volvería loco.

Por ejemplo:

User.delete_observers
User.create(:name => ‘pepe’, :club => Club.first)

Suponiendo que para que un usuario sea correcto, debe de pertenecer a
algún
club, añadiría la validadción correspondiente.

class User < AR::Base
belongs_to :club
validates_associated :club
validates_presence_of :club
end

class UserObserver < AR::Base
def before_validate(user)
user.club = Club.create_random if user.club.nil?
end
end

Lo de usar un observer en este caso, no tengo claro si sería matar
moscas a
cañonazos, así que tampoco te se decir bien si usar un observer o el
before_validate del propio modelo.

Un Saludo.


Guillermo Álvarez

Sent from Madrid, Comunidad de Madrid