2010-07-30 2 views
1

j'ai les suivantes créer une action:Comment affecter le contenu d'un modèle à un autre dans Rails?

def create 
    @order = Order.new(params[:order]) 

    if params[:same_as_above] == "1" 
     @order.billing_address.name = @order.shipping_address.name 
     @order.billing_address.number = @order.shipping_address.number 
     @order.billing_address.street = @order.shipping_address.town 
    end 

    if @order.save 
     if @order.purchase 
     render :action => "success" 
     else 
     render :action => "failure" 
     end 
    else 
     render :action => 'new' 
    end 
    end 

Il fonctionne, mais il semble un peu lourd et fragile de la façon dont je copie l'adresse de livraison à l'adresse de facturation, attribut par attribut. Y a-t-il un meilleur moyen s'il vous plait?

Répondre

3
@order.billing_address.attributes = @order.shipping_address.attributes 

le tour est joué.

0

Si vos modèles sont correctement configurés, vous pouvez utiliser:

@order.billing_address = @order.shipping_address 
+0

ActiveRecord :: AssociationTypeMismatch à CommandesController # créer billingAddress (# 18825000) prévu, obtenu ShippingAddress (# 18874550) – pingu

+0

C'est essentiellement ce que je voulais dire par les modèles ne sont pas mis en place correctement .... Pourquoi deux ensembles de classes et tables pour 'Address' - pourquoi à la fois' ShippingAddress' et 'BillingAddress'? – yfeldblum

+0

Parce que les données d'une table seront conservées, tandis que l'autre sera effacée régulièrement. C'est pourquoi j'ai la séparation. – pingu

Questions connexes