2010-07-28 6 views
0

J'ai deux modèles:Rails - problème avec HABTM

ItemType et PropertyType, ils sont connectés avec la relation HABTM.

Mais ce code ne fonctionne pas:

PropertyType.find(:all, :conditions => ["item_type_id != ?", existing_type_id]) 

J'ai erreur:

Mysql::Error: Unknown column 'item_type_id' in 'where clause': SELECT * FROM `property_types` WHERE (item_type_id != '3') 

Comment résoudre ce problème? Je veux trouver tous les PropertyTypes où item_type_id! = "Some_id"

Répondre

0

Il semble qu'il vous manque cette colonne dans votre table property_types. Avez-vous écrit/exécuté vos scripts de migration après avoir créé les modèles? Les modèles ne savent rien ou ne contrôlent rien dans la base de données, y compris son schéma.

ruby script/generate model crée automatiquement une migration de base pour vous, mais vous aurez probablement besoin de l'étoffer et l'exécuter avec rake db:migrate

+0

pas. c'est HABTM, j'ai donc JOIN-table. – vorobey

+0

try: PropertyType.find (: tout,: include =>: type_type,: conditions => ["property_types_item_types.item_type_id! =?", Exsiting_type_id]) –

+0

Je crois que c'est presque correct mais la table de jointure serait nommée par ordre alphabétique . C'est à dire. 'item_types_property_types' – bjg

1

Je pris la suite de votre description.

class ItemType 
    has_and_belongs_to_many :property_types 
end 

class PropertyType 
    has_and_belongs_to_many :item_types 
end 

create_table :item_types_property_types, :id => false do |t| 
    t.references :item_type, :property_type 
end 

alors votre requête ressemblerait à ceci:

PropertyType.find(:all, :include => :item_types, :conditions => ["item_types_property_types.item_type_id != ?", existing_type_id]) 
Questions connexes