まず、1 時間前に更新された3-1-stableブランチのRails 3.1を使用しています。
User、Company、およびJobの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
コードは問題なく動作しますが、次のことが可能かどうか疑問に思っていました。
ジョブをEmployerにリンクしたいので、次のシナリオを考えてみてください: Exampleの従業員であるユーザーJohnは、Rails Developer というジョブを投稿したので、 @job.employerにアクセスしたいので、ユーザーJohnに戻る必要があります。 、 言い換えると:
@user = User.find_by_name('john')
@job = Job.find(1)
@job.employer == @user #=> true
だから私は2つの可能な解決策を考えました
最初の解決策
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
2 番目の解決策
class Job
has_one :employer, :class_name => "User"
end
class User
belongs_to :job
end
どのルートに行けばいいですか?私のコードは正しいですか?
別の質問があります。class_name => "CompaniesUsers" オプションを has_many に渡す方法を取り除くには、クラスを Singular または Plural にする必要がありますか? Employeesのような名前に変更する必要がありますか?
PS: 同じ質問をRuby on Rails に投稿しました: Talk