Сначала я использую 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
Код работает просто отлично,но мне было интересно, возможно ли:
Я хочу связать работу с работодателем , так что подумайте об этом сценарии: Пользователь Джон кто является сотрудником Пример , он опубликовал работу Rails Developer, поэтому я хочу получить доступ к @job.employer, и он должен вернуть меня к пользователю Джон , другими словами:
@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, должен ли класс быть Singular или Plural?Должен ли я переименовать его в что-то вроде Сотрудники ?
PS: я отправил тот же вопрос в Ruby on Rails: Talk