最初にRails 3.13-1から安定ブランチを更新しました。Rails has_many:throughと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
だから私は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であるべきですか? 従業員のような名前に変更する必要がありますか?
PS:私は何かが欠けていない限り、私は単にこれはあなたに
user = User.first
user.jobs.create(params)
user.jobs # array
job = user.jobs.first
job.employer == user # true
のような方法を与えるだろう
class Job
belongs_to :employer, :class_name => "User"
end
class User
has_many :jobs
end
を行うことをお勧めしたいRuby on Rails: Talk
1つのジョブをただ1人の雇用者(ユーザ)に所属させますか? – Dogbert
はい、ジョブは1つの雇用者(ユーザー)にのみ属し、ユーザーには多くのジョブが属している必要があります。しかし、仕事を所有しているユーザーは、仕事を投稿した会社の従業員でなければなりません。 – kalbasit