Почему HABTM генерирует запросы, содержащие столбец id? - PullRequest
0 голосов
/ 13 октября 2010

У меня есть ролевая модель и модель разрешения.

Ролевая модель:

 has_and_belongs_to_many :permissions

Модель разрешения:

has_and_belongs_to_many :roles

Миграция для создания таблицы permissions_roles:

class CreatePermissionsRoles < ActiveRecord::Migration
  def self.up
    create_table :permissions_roles, :id => false do |t|
      t.integer :permission_id
      t.integer :role_id
    end
  end

  def self.down
    drop_table :permissions_roles
  end
end

Когда я пытаюсь назначить разрешения для роли, я получаю сообщение об ошибке «Недопустимое имя столбца 'id'". Дальнейшее изучение показывает, что запрос, который пытается выполнить:

INSERT INTO "permissions_roles" ("permission_id", "role_id", "id") VALUES (1, 1, 1)

Почему в мире он пытается добавить строку со значением id?

1 Ответ

0 голосов
/ 13 октября 2010

Разобрался. Я использую Microsoft SQL на серверной части. Это был один из многих нюансов работы с Microsoft SQL.

Проблема заключалась в том, что у меня была таблица "dbo.permissions_roles", в которую входило поле id из предыдущих экспериментов. Таблица, в которой действительно были данные, была rails_sa.permissions_roles, в которой не было идентификатора (rails_sa - это имя моей схемы и подключаемого пользователя)

По какой-то причине, которую я до сих пор не могу объяснить, данные за моделями хранились в rails_sa.permissions_roles. Но определение таблицы соединений исходило из dbo.permissions_roles. Я уверен, что этому крайнему случаю есть рациональное объяснение.

...