0

私はこのプロジェクトを実装しようとしています:

http://img7.imagebanana.com/img/cnb46ti2/relationships.png

  • 従業員の表示ページで従業員のスキルを表示できるようにしたい
  • 従業員には役職があり、すべての役職には、この役職の従業員が知る必要があるスキルがあります
  • したがって、私の理解が正しければ、ポジションとスキルには n:m の関係があり、has_many_and_belongs_to_many の関係には結合テーブルが必要です。ポジションには多くのスキルが含まれており、すべてのスキルは多くのポジションに属しているからです。

今私の質問

  1. position_skill-table -> has_and_belongs_to_many 関係を使用するほうがよいので、このテーブルには独自の ID がありませんか、それとも has_many :through 関係を使用する方がよいですか? has_and_belongs_to_many 関係を使用する方がよいと思います。この関係テーブルには 2 つのキー以外の情報が含まれないためです。私は正しいですか?
  2. has_and_belongs_to_many - リレーションシップを取る場合、モデルに書き込む必要があるのはそれだけですか?

a)class Position < ActiveRecord :: Base (...) has_and_belongs_to_many :skills (...)

b)class Skill < ActiveRecord :: Base (...) has_and_belongs_to_many :positions (...)

c) db\migratedef self.up create_table :positon_skill, :id => false do |t| (...) に移動し、その後、ポジションとスキルは相互に関連付けられますか? そうですか?私は何かを忘れましたか?

  • そうである場合、従業員の表示ページでスキルを表示するにはどうすればよいですか? 従業員には 1 つの役職があり、この役職にはいくつかのスキルがあります... 従業員の show.html.erb にコードを書き込む必要がありますか? みたいな<%= employee.position.skill %>?また、何かをレンダリングする必要がありますか? 申し訳ありませんが、私は非常に混乱しており、ウェブの情報を読みすぎていると思います...または、必要なものを正確に説明しているウェブの説明はありますか?

事前に多くのことを感謝し、その冗長な質問を申し訳ありません.

4

2 に答える 2

0

これは、ダイアグラムでどのように見えるかです。次の点を考慮してください。

class Employee < ActiveRecord :: Base
  belongs_to :position
  ...
end

class Position < ActiveRecord :: Base
  has_many :employees
  has_many :position_skills
  has_many :skills, :through => :position_skills
  ...
end    

class PositionSkill < ActiveRecord :: Base
  belongs_to :position
  belongs_to :skill
  ...
end

class Skill < ActiveRecord :: Base
  has_many :position_skills
  has_many :positions, :through => :position_skills
  ...
end

これに関する唯一の問題は、従業員が単一の役職に縛られていることです。このポジションは、ポジションを通じて多くのスキルを持っていますが。私はそれを従業員の位置belongs_toと従業員のhas_many位置に変更します。これにより、あるポジションから次のポジションに移動する従業員を追跡することができます。それについてさらに情報が必要な場合はお知らせください。

于 2011-06-17T19:11:01.803 に答える
0
  1. position_skills後でテーブルに情報を追加したくないことが確実な場合は、問題なくhas_and_belongs_to_many動作します。ただし、has_many :through後で気が変わった場合ははるかに柔軟で、セットアップもそれほど難しくありません.

  2. を使用する場合は、モデルとおよびフィールドhas_and_belongs_to_manyを含むデータベース テーブルでの関連付け宣言のみが必要です。あなたはすでにそれを持っているようです。position_id:integerskill_id:integer

ビューでアクセスできるようにするemployee.position.skillsには、従業員の関連付けを積極的に読み込む必要があります。次のようなことを試してください。

class EmployeesController < ApplicationController
  ...
  def show
    @employee = Employee.find(params[:id], :include => { :position => :skills })
  end
  ...
end

に固執has_and_belongs_to_manyすればうまくいくと思いますが、has_many :through(私が推奨する)に行く場合は、使用する必要があります:include => { :position => { :position_skills => :skills } }

于 2011-06-17T19:17:36.783 に答える