0

Я бегу Rails 2.3.2 и делает: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 

и получить ошибку

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) 

Как я могу получить эту работу?

The Rails documentation on HBTM говорит:

ВНИМАНИЕ: Если вы перезапись имя таблицы либо класса, метод table_name должен быть объявлен под любым has_and_belongs_to_many декларации для того, чтобы работать.

Что это значит?

ответ

5

Вам нужно будет использовать: foreign_key также в вызове has_and_belongs_to_many. Таким образом, в модели StandardWidget вам это нужно:

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

предупреждения в документации означает, что если вы используете другие, чем «части» для модели части и «standard_widgets» для модели StandardWidget имен таблиц, то вам нужно для вызова 'set_table_name' под вызовом habtm.

+0

Работал! Благодаря! – ma11hew28

Смежные вопросы