Ich habe eine etwas komplizierte Abfrage, die ich als natürliche ActiveRecord-Beziehung haben möchte. Derzeit rufe ich @ calendar.events und @ calendar.shared_events auf, schließe dann die Arrays an und sortiere sie. Die Konsolidierung in der Lage, mit dieser SQL zu tun:Wie würden Sie diese SQL-Abfrage in einer ActiveRecord-Beziehung darstellen?
SELECT calendar_events.* FROM calendar_events left outer join calendar_events_calendars on calendar_events_calendars.calendar_event_id = calendar_events.id where calendar_events.calendar_id = 2 or calendar_events_calendars.calendar_id = 2
aber ich bin nicht sicher, wie dies als Active Beziehung zu vertreten. Ich weiß, ich könnte einen benutzerdefinierten SQL-Finder verwenden, aber ich möchte in der Lage sein, Bereiche für die Ergebnisse zu verwenden.
Derzeit gehört ein Ereignis zu einem Kalender und gehört auch zu vielen anderen Kalendern über eine HABTM Join-Tabelle:
has_and_belongs_to_many :shared_events, :class_name => 'CalendarEvent', :order => 'beginning DESC, name'
has_many :events, :class_name => 'CalendarEvent', :dependent => :destroy, :order => 'beginning DESC, name'
Alle Zeiger sehr geschätzt :)
Das ist eine gute Frage. Jedes Ereignis gehört nur zu einem Kalender, kann jedoch mit anderen Kalendern verknüpft werden. Ich denke, ich hätte eine has_many: through durchführen und eine Art boolesche Spalte in der Join-Tabelle setzen können, um anzuzeigen, ob das Ereignis im Besitz dieses Kalenders war, aber das schien zu heikel. Besser als ein Ereignis gehört definitiv zu einem Kalender und kann dann bei Bedarf auch mit anderen verknüpft werden. Ich verstehe, warum activerecord eine solche Beziehung nicht zulassen kann, da das Hinzufügen neuer Ereignisse problematisch wäre. –
Danke :) Ich habe wirklich versucht, das nicht zu tun, aber am Ende musste ich deinen Weg gehen :) Es war tatsächlich überraschend einfach! Bis auf das Zuweisen von Ereignissen zu Kalendern. Ich habe eine andere Frage für diesen Zweck erstellt. –