2010-12-14 3 views
1

J'essaie de travailler avec des luminaires dans des rails. Le rake db: accessoires: charge fonctionne sans erreur, et une table remplit mes données, mais mes nombreux à beaucoup d'autres rejoignent la table contient ids incorrectes:Rails 3 Les identifications de la table de jointure du luminaire sont incorrectes

Exemple:

**tags.yml** 
one: 
    id: 1 
    tag: pie 
    posts: two 

two: 
    id: 2 
    tag: cake 
    posts: one, two 

**posts.yml** 
one: 
    id: 1 
    subject: subject 
    content: content 
    slug: woot 
    tags: cake 

two: 
    id: 2 
    subject: subject2 
    content: content2 
    slug: this_is_good 
    tags: pie, cake 

Après la migration en cours d'exécution et db:fixtures:load mes tables sont peuplées comme:

tags:
id ------ tag
1 ...... tarte
2 ...... gâteau

posts_tags:
rowid - post_id - tag_id
1 ...... 1 ...... 974324064
2 ...... 2 ...... 576189563
3 .. .... 3 ... 974324064

Pour une raison quelconque, un tag_id généré automatiquement est créé et rempli dans ma table de jointure. Pourquoi?

Modifier

Les migrations sont définies comme:

def self.up 
    create_table :posts do |t| 
     t.string :subject 
     t.text :content 

     t.timestamps 
    end 
    end 

et

def self.up 
    create_table :tags do |t| 
     t.string :tag 

     t.timestamps 
    end 

    create_table :posts_tags, :id => false do |t| 
     t.integer :post_id 
     t.integer :tag_id 
    end 
    end 

Répondre

0

Je vais assumer vos modèles sont quelque chose comme ça.

class Tag Post < ActiveRecord::Base 
    has_and_belongs_to_many :posts 
end 

class Post < ActiveRecord::Base 
    has_and_belongs_to_many :tags 
end 

Cela signifie que le posts_tags les table de jointure ne peut avoir post_id et tag_id en colonnes comme. Il ne peut pas avoir une colonne rowid. Vous aurez besoin de quelque chose comme :id => false dans la définition du tableau posts_tags.

+0

la table posts_tags est déjà définie avec: create_table: posts_tags,: id => false do | t | t.integer: post_id t.integer tag_id end. Je ne sais pas pourquoi la colonne rowid est créée? – Mark

1

Je suppose que vous avez défini les associations appropriées. Vous avez juste besoin d'un petit changement dans vos appareils:

**tags.yml** 
one: 
    tag: pie 
    posts: two 

two: 
    tag: cake 
    posts: one, two 

**posts.yml** 
one: 
    subject: subject 
    content: content 
    slug: woot 
    tags: 
    - two 

two: 
    subject: subject2 
    content: content2 
    slug: this_is_good 
    tags: 
    - one 
    - two 

EDIT: J'ai supprimé tous les ID des appareils. Cela génère des références correctes. Mais ce n'est pas tout à fait la bonne réponse.

+0

Cela n'a pas l'air d'aider? – Mark

+0

Laissez-moi essayer rapidement. Êtes-vous sur Rails 3? – Swanand

+0

Aussi, comment est l'association? ('habtm' ou' hm through'?) – Swanand

0

Votre base de données de test a peut-être un ancien schéma dans lequel vous avez utilisé une colonne "rowid"?

Essayez:

rake db:test:clone 
Questions connexes