2

私は現在の協会を持っています:

Group :has_many EmployeesEmployee :belongs_to Group

しかし今、私は従業員を多くのグループにも関連付けたいと思っています。

この目的のために私は作ることを考えています:

groupizations group_id:integer employee_id:integer created_at:datetime

これにより、従業員モデルとグループモデルが変更されます。

class Groupizations < ActiveRecord::Base
   belongs_to  :employee
   belongs_to  :group
end

class Group < ActiveRecord::Base
   has_many    :groupizations
   has_many    :employees, :through => categorizaitons
end

class Employee < ActiveRecord::Base
   has_many    :groupizations
   has_many    :groups, :through => categorizaitons
end

多対多のrailscastsエピソードからこれらすべてを理解しています。私が混乱しているのは、今、次のコードで新しい従業員を作成していることだけです。

  def create
    @employee = Employee.new(params[:employee])
    if @employee.save
      flash[:notice] = "Successfully created employee."
      redirect_to @employee
    else
      render :action => 'new'
    end
  end

このコードはどのように変更されますか?groupizations同時にデータを追加する必要がありますか?

4

1 に答える 1

1

従業員をグループに追加する場合は、次のことを行うだけで済みます。

@employee.groups << @group

Groupizationあなたがそれを呼んだように、レコードは自動的に作成されます。この関係の性質を指定する場合に一般的なメタデータを関連付けに配置する場合は、より正式な方法を実行できます。

@employee.groupizations.create(
  :group => group,
  :badge_number => 'F920'
)

結合モデルは通常、2つのID列に一意のインデックスがあるため、重複レコードを挿入するときに発生する可能性のあるエラーから確実に保護してください。これらはバックエンドDBによって外観が異なるため、それに応じてテストしてください。必要に応じてご利用いただけますfind_or_create

于 2010-08-09T17:40:07.667 に答える