2016-04-01 13 views
0

Ich habe zwei Modelle (Kunde, Produkt). Sie sind mit der Beziehung has_one verbunden. Derzeit mache ich dasVariable als Objektattribute in Schienen

@customer = Customer.first 
@customer.product.name 

Dieser Ausgang, der Name des Produkts und das funktioniert gut. Jetzt möchte ich etwas wie das

product_type = "product" 
@customer = Customer.first 
@customer."#{product_type}".name 

Dies sollte Produktname wie zuvor ausgeben. Wie kann ich das erreichen?

Antwort

0

Sie können versuchen, mit Typen [:active, :sold, :not_active] vorausgesetzt, sind die Arten von Produkten

class Customer < ActiveRecord::Base 
    has_one :product 
    [:active, :sold, :not_active].each do |type| 
     define_method "#{type}" do 
     product.where(type: type).first 
     end 
    end 
end 

Jetzt @customer.active.name geben den aktiven (Typ) Produktname

oder @customer.sold.name den verkauften geben (Art) Produktname

oder @customer.not_active.name geben Sie den nicht aktiven (Typ) Produktnamen

auf diese Weise y Sie können für alle anderen Typen definieren und aufrufen, wie Sie benötigen