Frage

Ich habe einen aktuellen Verein gilt:

Group :has_many Employees und Employee :belongs_to Group

aber jetzt möchte ich ein Angestellter als auch zu vielen Gruppen zugeordnet werden.

Zu diesem Zweck Ich denke machen:

groupizations group_id:integer employee_id:integer created_at:datetime

Dies wird Mitarbeiter und Gruppenmodelle ändern:

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

Ich verstehe all dies von Railscasts Folge auf vielen to-Many. Das Einzige, was ich bin verwirrt ist, dass jetzt ich einen neuen Mitarbeiter mit folgendem Code zu erstellen:

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

Wie wird dieser Code ändern? Muss ich hinzufügen, Daten in groupizations zugleich jetzt?

War es hilfreich?

Lösung

Wenn Sie einen Mitarbeiter zu einer Gruppe hinzufügen möchten, müssen Sie nur tun müssen, um:

@employee.groups << @group

Der Groupization Datensatz, wie Sie es genannt haben, werden automatisch erstellt. Wenn Sie einige Meta-Daten in der Vereinigung setzen wollen, die gemeinsam ist, wenn man die Natur dieser Beziehung angeben möchten, könnten Sie etwas mehr formal tun:

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

Wie kommen Modelle typischerweise einen eindeutigen Index für die beiden ID-Spalten haben, sollten Sie von Fehlern zu Rettung, die auftreten können, wenn ein doppelter Datensatz eingefügt wird. Diese Optik unterscheiden sich je nach Ihrem Backend-DB, so Test entsprechend. Sie können find_or_create verwenden je nach Bedarf.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top