Рельсы один ко многим связаны с проблемой class_name - PullRequest
0 голосов
/ 12 мая 2011

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

ActiveRecord :: StatementInvalid: Mysql :: Ошибка: неизвестный столбец 'events.user_id' в 'предложении where: SELECT events. * 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

Ответы [ 2 ]

1 голос
/ 12 мая 2011

Попробуйте использовать параметр: 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 позволяет установить имя внешнего ключа напрямую.

0 голосов
/ 12 мая 2011

Попробуйте:

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