0

Ich bin mit Rails 2.3.2 und tun:Rails HBTM join_table overwirting table_name

class StandardWidget < ActiveRecord::Base 
    has_and_belongs_to_many :parts, :join_table => "widgets_parts", :association_foreign_key => "widget_custom_id" 
end 

class Part < ActiveRecord::Base 
    has_and_belongs_to_many :widgets, :join_table => "widgets_parts", :association_foreign_key => "part_custom_id" 
end 

p = StandardWidget.find(5) 
p.widgets 

und erhalten den Fehler

ActiveRecord::StatementInvalid: Mysql::Error: Unknown column 'widgets_parts.standard_widget_id' in 'where clause': SELECT * FROM `widgets` INNER JOIN `widgets_parts` ON `parts`.part_custom_id = `widgets_parts`.part_custom_id WHERE (`widgets_parts`.standard_widget_id = 5) 

Wie kann ich diese Arbeit bekommen?

The Rails documentation on HBTM sagt:

WARNUNG: Wenn Sie den Tabellennamen der beiden Klassen sind überschreiben, die table_name Methode muss unterhalb jeder has_and_belongs_to_many Erklärung zu arbeiten, um zu erklären.

Was bedeutet das?

Antwort

5

Sie müssen verwenden: foreign_key auch in der has_and_belongs_to_many Aufruf. So im StandardWidget Modell müssen Sie dies:

has_and_belongs_to_many :parts, :join_table => "widgets_parts", :association_foreign_key => "widget_custom_id", :foreign_key => "part_custom_id" 

Die Warnung in der Dokumentation bedeutet, dass, wenn Sie Tabellennamen verwenden, andere als ‚Teile‘ für das Teilmodell und ‚standard_widgets‘ für das StandardWidget Modell, dann müssen Sie Aufruf von 'set_table_name' unterhalb des Aufrufs von isttm

+0

Gearbeitet! Vielen Dank! – ma11hew28