2011-05-11 5 views
0

J'ai deux modèles, utilisateur et événement. Chaque événement a un administrateur unique qui est un rôle utilisateur. Lorsque je tente d'accéder à @ user.administered_events pour obtenir les événements, ce message est affiché sur m trying to access @event.admin i get my admin user but if I.Rails un à plusieurs association avec class_name problème

ActiveRecord :: StatementInvalid: Mysql :: Erreur: Unknown column 'events.user_id' dans 'where'. SELECT * FROM eventsevents OU (events .user_id = 5)

Rails tente d'accéder user_id de l'événement au lieu de admin_id. Qu'est-ce que je fais mal?

class User < ActiveRecord::Base 
    has_many :administered_events, :class_name => "Event" 
end 

class Event < ActiveRecord::Base 
    belongs_to :admin, :class_name => "User" 
end 

class CreateEvents < ActiveRecord::Migration 
    def self.up 
    create_table :events do |t| 
     t.string :title 
     t.date :date 
     t.string :status 
     t.integer :admin_id 

     t.timestamps 
    end 
    end 

    def self.down 
    drop_table :events 
    end 
end 

Répondre

1

Essayez d'utiliser l'option: foreign_key lors de la déclaration de vos associations:

class User < ActiveRecord::Base 
    has_many :administered_events, :class_name => "Event", :foreign_key => "admin_id" 
end 

class Event < ActiveRecord::Base 
    belongs_to :admin, :class_name => "User" 
end 

De la documentation Rails:

By convention, Rails guesses that the column used to hold the foreign key on the other model is the name of this model with the suffix _id added. The :foreign_key option lets you set the name of the foreign key directly.

0

Essayez:

class User < ActiveRecord::Base 
    has_many :administered_events, :class_name => "Event" , foreign_key => "admin_id" 
end 
Questions connexes