2009-07-20 9 views
0

Ok, j'ai une situation un peu étrange (comme si aucun de mes autres n'était ...). Fondamentalement, j'ai une configuration où il y a 4 entités:(Rails) Diverses associations entre entités non apparentées?

Sites -> Buildings -> Meters -> Values 

j'ai une cinquième entité (graphiques) qui crée des rapports sur les valeurs. J'ai une demande pour permettre que les graphiques soient visuellement associés à l'un de ces éléments afin d'accommoder les utilisateurs finaux. Fondamentalement, chaque graphique ne peut être associé qu'à une seule entité à la fois. Y a-t-il une qualité "ACTS_AS" ou quelque chose de fou et de sauvage qui me permettra intuitivement d'associer des chartes à n'importe quelle entité sans ajouter de table pour chaque nouvelle association?

Meilleur.

Répondre

0

Peut-être que vous voulez des associations polymorphes.

class Chart < ActiveRecord::Base 
    # charts table has a chartable_id and a chartable_type column. Type is the 
    # class name of the associated chartable: Site, Building, etc. 
    belongs_to :chartable, :polymorphic => true 
end 

class Site < ActiveRecord::Base 
    has_one :chart, :as => :chartable 
end 

class Building < ActiveRecord::Base 
    has_one :chart, :as => :chartable 
end 

# ... 
+0

Très agréable. J'ai un peu de mal à comprendre ce que l'interface pourrait ressembler. Déposer des boîtes? Cases à cocher? * scratches head * –

+0

Ok, j'ai regardé "Railscastcasts Episode 154" concernant Polymorphism et ça couvre définitivement ce dont j'ai besoin. Cependant, il manque une chose - fondamentalement, il suppose que la personne va ajouter un nouvel élément via un formulaire. Cependant, je veux soumettre à distance via javascript et ajaxily (yup c'est sûrement un mot quelque part) l'afficher en place. Des suggestions sur la façon de s'y prendre tout en gardant tout le code pertinent dans le contrôleur CHART seulement? –

+0

... aussi, je reçois des erreurs UnknownAction quand j'essaie de faire quelque chose comme "Sites/1/charts". J'ai correctement défini mes itinéraires (par railcast), mais quelque chose est toujours cassé. Des idées? –

Questions connexes