Сначала я использую Rails 3.1 из ветки 3-1-stable, обновленной час назад.
Я разрабатываю приложение, в котором у меня есть 3 основные модели: Пользователь, Компания и Работа. Вот соответствующая часть моделей:
class User < ActiveRecord::Base
has_many :companies_users, class_name: "CompaniesUsers"
has_many :companies, :through => :companies_users, :source => :company
end
class Company < ActiveRecord::Base
has_many :companies_users, class_name: "CompaniesUsers"
has_many :employees, :through => :companies_users, :source => :user
has_many :jobs, :dependent => :destroy
end
class Job < ActiveRecord::Base
belongs_to :company, :counter_cache => true
end
class CompaniesUsers < ActiveRecord::Base
belongs_to :company
belongs_to :user
end
Код работает отлично, но мне было интересно, возможно ли:
Я хочу связать вакансию с работодателем, поэтому подумайте о следующем сценарии: пользователь Джон, который является сотрудником пример. strong>, он разместил вакансию Rails Developer, поэтому я хочу получить доступ к @job.employer, и это должно вернуть мне пользователя John, другими словами:
@user = User.find_by_name('john')
@job = Job.find(1)
@job.employer == @user #=> true
Поэтому я подумал о двух возможных решениях
Первое решение
class Job
has_one :employer, :through => :employers
end
class User
has_many :jobs, :through => :employers
end
class Employer
belongs_to :job
belongs_to :user
end
Второе решение
class Job
has_one :employer, :class_name => "User"
end
class User
belongs_to :job
end
По какому маршруту мне идти? Мой код правильный?
У меня другой вопрос, как избавиться от параметра class_name => «CompaniesUsers», переданного has_many, должен ли класс быть в единственном или множественном числе? Должен ли я переименовать его во что-то вроде Employees?
P.S. Тот же вопрос я отправил в Ruby on Rails: Talk.