2011-09-30 1 views
1

J'ai deux éléments, les utilisateurs et les messages, et une table de jointure les reliant entre eux. Les deux éléments ont une relation has_many entre eux (: via la table de jointure). J'ai créé la table de jointure après avoir créé les deux bases de données. Le problème que j'ai est que je reçois des erreurs chaque fois que j'essaie de faire quelque chose avec @ user.posts ou @ post.users. C'est presque comme s'ils n'étaient pas configurés correctement. Quelque part je lisais que si vous créez une association après avoir créé le modèle, vous devez utiliser la méthode add_column. Est-ce mon problème? Je n'étais pas sûr de la façon de mettre en œuvre cette méthode ou quoi que ce soit. C'est l'erreur que je reçois:joindre table et has_many relations ne fonctionne pas

SQLite3 :: SQLException: aucune colonne de ce type: users.post_id: SELECT "users". * FROM "utilisateurs" WHERE "users". "Post_id" = 60 AND "users". " id "=? LIMIT 1

On dirait de l'erreur que j'ai besoin d'ajouter une colonne, mais je ne suis pas sûr de la façon de le faire.

ici est mon dernier schema.db:

ActiveRecord::Schema.define(:version => 20110930155455) do 

    create_table "posts", :force => true do |t| 
    t.text  "content" 
    t.integer "vote_count" 
    t.text  "author" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    t.integer "user_id" 
    end 

    create_table "users", :force => true do |t| 
    t.string "user_name" 
    t.string "password" 
    t.date  "time" 
    t.integer "posts_id" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    t.integer "post_id" 
    end 

    create_table "votes", :force => true do |t| 
    t.integer "post_id" 
    t.integer "user_id" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    end 

end 
+1

Pourriez-vous publier les parties du schéma actuel qui ont à voir avec les tables utilisateurs, messages et la table de jointure? Vous le trouverez dans votre application sous 'db/schema.rb'. Et aussi la définition des classes 'User',' Post' et la classe de modèle de jointure (au cas où vous auriez une classe concrète pour cela). J'ai ensuite utilisé les associations "has_many: through" ... – mliebelt

+0

+1 pour l'envoi de code de modèle et d'informations sur la table de jointure. Votre table d'utilisateurs ne devrait pas avoir de champ post_id et de même, la table posts ne devrait pas avoir de champ user_id. Ces champs doivent être dans la table de jointure. –

Répondre

0

Oui, vous devez créer une migration pour les clés étrangères. Vous devez ajouter post_id à la table: users avec type integer. Exécutez

rails g migration AddPostIdToUsers post_id:integer 

pour générer votre migration. Vous devez créer un qui ressemble à

class AddPostIdToUsers < ActiveRecord::Migration 
    def change 
    add_column :users, :post_id, :integer 
    end 
end 

Vous pouvez également envisager la création d'un * has_many: par l'association *, il vous donnera plus de contrôle.

+0

J'utilise l'association: through. Cela n'a pas semblé aider. Je semble avoir des problèmes avec la mise à jour de ma table. J'ai réalisé que j'ai nommé une colonne dans la table des messages la même que ma table de jointure. J'ai essayé de changer le nom et lancer rake db: migrer mais rien ne se passe. Le nom n'est pas changé. Je ne sais pas si je crée ces associations et d'autres choses mais rien n'est réellement mis à jour? – user972276

+0

Dans ce cas, vous avez besoin des FK dans votre table de jointure, pas dans User ou Post. Vous rejoignez la table essentiellement à 'belongs_to: user' et' belongs_to: post'. Ensuite, exécutez 'rake db: migrate' et vous verrez ceux-ci ajoutés dans' schema.db'. Vous pouvez jouer avec les associations dans la console rails et c'est un bon moyen de vérifier que cela fonctionne. –

Questions connexes