2

まず、1 時間前に更新された3-1-stableブランチのRails 3.1を使用しています。

UserCompany、および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

4

2 に答える 2

1

私が何かを逃していない限り、私は単にすることをお勧めします

class Job
  belongs_to :employer, :class_name => "User"
end

class User
  has_many :jobs
end

これはあなたに次のような方法を与えるでしょう

user = User.first
user.jobs.create(params)
user.jobs # array
job = user.jobs.first
job.employer == user # true

employer_idこれを機能させるには、Jobsテーブルに整数フィールドが必要です。

于 2011-06-22T09:04:21.133 に答える
0

通常、パススルー モデルに名前を付けます。

company_user

次に、これは必要ありません:

class_name: "CompaniesUsers"

データベーステーブルの名前が次のようになっていることを確認してください。

company_users

あなたが持っているものはあなたのために働くので、それは素晴らしいことです. 慣例に従わないと、途中でトラブルに遭遇するだけです。

于 2013-03-03T20:54:04.593 に答える