Таблицы ссылок HABTM не принимают значение isolate_namespace в монтируемом движке - PullRequest
5 голосов
/ 21 марта 2012

Я сейчас разрабатываю монтируемый двигатель.В движке у меня есть две следующие модели:

  module Ems
    class Channel < ActiveRecord::Base
      has_and_belongs_to_many :categories
    end
  end

  module Ems
    class Category < ActiveRecord::Base
      has_and_belongs_to_many :channels
    end
  end

Это файлы миграции БД:

  class CreateEmsChannels < ActiveRecord::Migration
    def change
      create_table :ems_channels do |t|
        t.string :slug
        t.string :name

        t.timestamps
      end
    end
  end

  class CreateEmsCategories < ActiveRecord::Migration
    def change
      create_table :ems_categories do |t|
        t.string :slug
        t.string :name
        t.text :strapline

        t.timestamps
      end
    end
  end


  class CreateEmsCategoriesChannels < ActiveRecord::Migration
    def up
      # Create the association table
      create_table :ems_categories_channels, :id => false do |t|
        t.integer :category_id, :null => false
        t.integer :channel_id, :null => false
      end

      # Add table index
      add_index :ems_categories_channels, [:category_id, :channel_id], :unique => true
    end
  end

Проблема начинается, когда я пытаюсь получить связанные объекты.Например, когда я вызываю @channel.get :categories, я получаю следующую ошибку:

Mysql2::Error: Table 'ems_development.categories_channels' doesn't exist: 
SELECT `ems_categories`.* 
FROM `ems_categories` 
INNER JOIN `categories_channels` 
ON `ems_categories`.`id` = `categories_channels`.`category_id` 
WHERE `categories_channels`.`channel_id` = 1

Как вы можете видеть, что она отсутствует в значении isolate_namespace в таблице ссылок, так как она должна искать связь в таблицеems_categories_channels не categories_channels

У кого-нибудь были похожие проблемы или я что-то упустил?

1 Ответ

6 голосов
/ 25 марта 2012

Вы можете явно указать имя таблицы соединений ( согласно документации ).

  module Ems
    class Channel < ActiveRecord::Base
      has_and_belongs_to_many :categories, :join_table => 'ems_categories_channels'
    end
  end

  module Ems
    class Category < ActiveRecord::Base
      has_and_belongs_to_many :channels, :join_table => 'ems_categories_channels'
    end
  end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...