2

Ich habe diese 3 Modelle:Kann hinzufügen oder löschen, das nicht der Fall viele durch Assoziationsmodell hat in Schienen 3.2

class BikeActionGroup < ActiveRecord::Base 
    has_many :bike_action_groups_slas 
    has_many :slas,through: :bike_action_groups_slas 
end 

class BikeActionGroupsSla < ActiveRecord::Base 
    belongs_to :bike_action_group 
    belongs_to :sla 
end 

class Sla < ActiveRecord::Base 
    has_many :bike_action_groups_slas 
    has_many :bike_action_groups, through: :bike_action_groups_slas 
end 

Jedes Mal, wenn ich versuche, etwas hinzuzufügen oder zu löschen, um sla.bike_action_groups es mir eine NoMethodError auf dem löschen gibt oder anhängen. Ich sla.bike_action_groups ausgetestet den Inhalt davon zu sehen und es nicht eine Reihe von bike_action_groups zurückkehren, gibt es diese stattdessen:

[#<BikeActionGroup id: 2, name: "Wheels">]

Ich kann nicht rufen alle Methoden auf diese löschen möchte, aber wenn ich es konvertieren mit to_a zu Array kann ich, nur wird diese nicht von der tatsächlichen sla.bike_action_groups löschen, aber aus dem konvertierten Feld

dies sind die Methoden verwenden, um ich hinzufügen oder löschen:

@sla.bike_action_groups << @bike_action_group  
@sla.bike_action_groups.delete(@bike_action_group) 
+2

Können Sie die von Ihnen verwendeten Methodenaufrufe posten? Dies ist das erwartete Verhalten von has_many, aber ich möchte sehen, wie Sie versuchen, es zu verwenden, bevor Sie meine Antwort posten. – RichardAE

+0

hast du '' '' auf 'sla.bike_action_groups' versucht? wahrscheinlich, wenn Schienen 3 kann keine richtige Zwischensatz hinzufügen, müssen Sie nicht durch Beziehung verwenden ... –

Antwort

0

Sie müssen

class BikeActionGroup < ActiveRecord::Base 
    has_many :bike_action_groups_slas, :dependent => :destroy 
    has_many :slas,through: :bike_action_groups_slas 
end 
class BikeActionGroupsSla < ActiveRecord::Base 
    belongs_to :bike_action_group 
    belongs_to :sla 
end 

class Sla < ActiveRecord::Base 
    has_many :bike_action_groups_slas, :dependent => :destroy 
    has_many :bike_action_groups, through: :bike_action_groups_slas 
end 

für weitere Informationen :dependent => :destroy in Ihrem has_many Verein zu verwenden, gehen durch diese Link

+0

Hmm das hat wirklich nichts geändert – Kupi

0

Es ist nur eine Sammlung von Active Objekte, keine Instanz, so können Sie #delete oder andere nicht nennen Instanzmethoden darauf.

aber für sicher, dass Sie sollten in der Lage zu dieser Sammlung neue Objekt zu bauen, wie folgt aus: sla.bike_action_groups.build oder sla.bike_action_groups.new

in dieser Sammlung, einfach zuerst bekommen ein jeder Instanz zu zerstören: sla.bike_action_groups.first.destroy

+0

wird es nicht das Modell selbst zerstören, anstatt es aus der Sammlung zu entfernen? – Kupi

+0

'sla.bike_action_groups.first.destroy' es wird das einzelne Modell zerstören, nicht die Verbindung trennen. –

+1

Was ich versuche zu tun, ist es nur zu lösen und nicht löschen die 'bike_action_group' selbst – Kupi

0

Verwenden clear

wie in collection.clear - entfernt jedes Objekt aus der Sammlung. Dies zerstört die Objekte nicht. Siehe hierzu link

Verwandte Themen