I haben Modelle User
, Photo
und Favorite
, wo favorites
eine Tabelle aus users
zu photos
verbinden ist, das heißt:Erstellen mehrerer has_many über Verbände aus einem Array von IDs
class User < ActiveRecord::Base
has_many :favorites
has_many :photos, through: `favorites`
end
class Photo < ActiveRecord::Base
has_many :favorites
has_many :users, through: `favorites`
end
class Favorite < ActiveRecord::Base
belongs_to :user
belongs_to :photo
end
sagen, dass @user
ist eine Instanz User
und photo_ids
ist ein Array von Primärschlüsseln von Fotos. Was ist die schnellste und/oder prägnanteste Art, all diese Fotos zu @user.photos
hinzuzufügen?
Das Beste, was ich kann mit ist:
@user.favorites.create(photo_ids.map { |id| {photo_id: id } })
Aber das scheint mir ziemlich ausführlich. Hat Rails keine bessere Lösung?
Andere Fragen sprechen über die Erstellung mehrerer has_many: through:
Assoziationen durch ein geschachteltes Formular, aber ich versuche, dies in einer JSON-API zu tun, so dass keine Formulare beteiligt sind.
Haben Sie 'nicht erkennen konnte <<' auf einer Active Vereinigung. Vielen Dank! – GMA
Beachten Sie auch, dass das Objekt auf der rechten Seite ein Array ist - es funktioniert aber immer noch. – BroiSatse
Eigentlich glaube ich nicht, dass das funktionieren würde, würde 'Photo.find_by_id' nur ein Ergebnis zurückgeben? 'Photo.where (id: photo_ids)' oder 'Photo.find (photo_ids)' funktionieren beide gut. – GMA