首先我使用Rails 3.1從3-1穩定分支更新一小時前。Rails has_many:通過和has_one:通過協會
我開發一個應用程序,我有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開發者,所以我想訪問@ 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,該類應該是單數還是複數?我應該將它重命名爲員工?
PS:我貼到Ruby on Rails: Talk
你想讓一個工作只屬於一個僱主(用戶)嗎? – Dogbert
是的,一個工作應該只屬於一個僱主(用戶),並且一個用戶有很多工作。然而,擁有這份工作的用戶必須是公佈的工作公司的僱員。 – kalbasit