Связь "один ко многим" с проблемой class_name

У меня две модели: User и Event. У каждого события есть уникальный администратор, который является пользователем. Когда Im trying to access @event.admin i get my admin user but if Im пытается получить доступ к @ user.administered_events для получения событий, отображается это сообщение.

ActiveRecord :: StatementInvalid: Mysql :: Error: Неизвестный столбец 'events.user_id' в 'where clause': SELECT _2 _. * FROM events WHERE (events.user_id = 5)

Rails пытается получить доступ к user_id из Event вместо admin_id. Что я делаю не так?

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

person Cirdes    schedule 11.05.2011    source источник


Ответы (2)


Попробуйте использовать опцию: foreign_key при объявлении ваших ассоциаций:

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

Из документации Rails:

По соглашению Rails предполагает, что столбец, используемый для хранения внешнего ключа в другой модели, является именем этой модели с добавленным суффиксом _id. Параметр: foreign_key позволяет вам напрямую установить имя внешнего ключа.

person mbreining    schedule 12.05.2011

Пытаться:

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