Héritage à une table

Bonjour,

Comme chaque jour (ou presque) je rencontre un problème :slight_smile:

J’ai des équipements informatiques qui ont des cartes (réseaux,
fibres…)
J’ai donc un modèle “equipment” et un modèle “card”

Les relations sont de ce type :
equipment (0,n)—> cards <—(0,n) interfaces

La table interfaces contient le nom (eth0, eth1…, hba1, hba2…)

J’ai ensuite plusieurs autres modèles qui héritent de “card”

class Card < ActiveRecord::Base
belongs_to :interface
belongs_to :equipment
end

class NetworkCard < Card
end

class SanCard < Card
end

J’ai une colonne “type” dans la table “cards” qui est remplie
correctement avec les classes des différentes cartes.

Par contre, lorsque j’utilise le code suivant
<%= @equipment.network_cards.map{|m| “m.interface.name:
#{m.adresse_ip}
”} %>

j’ai l’erreur suivante:
undefined method `network_cards’ for…

Ce qui est bizarre c’est que le code suivant :
<%= @equipment.cards.map{|m| “#{m.class}
”} %>

me renvoit bien la bonne classe (par exemple NetworkCard)

J’ai oublié de dire “merci par avance pour votre aide” :slight_smile:

Salut Arnaud

Peux tu nous copier ta déclaration de Equipment ?

Si tu as mis un has_many :cards, la méthode network_cards ne sera pas
présente…

Thibaut Barrère wrote:

Salut Arnaud

Peux tu nous copier ta déclaration de Equipment ?

Si tu as mis un has_many :cards, la méthode network_cards ne sera pas
présente…

Effectivement j’ai “has_many :cards”

Il faudrait que j’ai également
has_many :network_cards
has_many :san_cards
… ??

j’ai préféré rajouter quelques méthodes de ce genre dans equipment.rb :
def network_cards
NetworkCard.find_all_by_equipment_id(self.id)
end

Merci quand même!

Regarde par ici :

Example: A Firm class declares
has_manyhttp://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#M000530:clients,
which will add:

  • Firm#clients (similar to Clients.find :all, :conditions => “firm_id
    = #{id}”)
  • Firm#clients<<
  • Firm#clients.delete
  • Firm#clients=
  • Firm#client_ids=
  • Firm#clients.clear
  • Firm#clients.empty? (similar to firm.clients.size == 0)
  • Firm#clients.size (similar to Client.count “firm_id = #{id}”)
  • Firm#clients.find (similar to Client.find(id, :conditions =>
    “firm_id = #{id}”))
  • Firm#clients.build (similar to Client.new(“firm_id” => id))
  • Firm#clients.create (similar to c = Client.new(“firm_id” => id);
    c.save; c)

a+

Thibaut