J'ai un modèle de rôle et un modèle d'autorisation.Pourquoi HABTM génère-t-il des requêtes qui incluent une colonne 'id'?
Le modèle de rôle:
has_and_belongs_to_many :permissions
Le modèle d'autorisation:
has_and_belongs_to_many :roles
La migration pour créer la table 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
Lorsque je tente d'attribuer des autorisations à un rôle , J'obtiens l'erreur "Nom de colonne invalide" id "." Un examen plus approfondi révèle que la requête est une tentative d'exécution:
INSERT INTO "permissions_roles" ("permission_id", "role_id", "id") VALUES (1, 1, 1)
Pourquoi dans le monde est-il tente d'ajouter une ligne avec un identifiant?
Avez-vous créé cette table auparavant avec une colonne ID, et vous avez oublié de la supprimer avant d'utiliser cette migration? Vous avez oublié de redémarrer votre serveur? Ou peut-être est-ce dans l'environnement de test et vous avez oublié d'exécuter 'rake db: test: prepare'? Le comportement semble maladroit, donc l'étape suivante consisterait à publier plus de code qui déclenche l'erreur et certains journaux. – jdl
Voir ma réponse ci-dessous. Les schémas Microsoft SQL et mes expériences antérieures étaient en train de tout gâcher. –