Ich bin mir nicht sicher, ob ich gerade nicht das Richtige suche, aber ich suche nach einem Bereich, um dann als Sammlung für eine Auswahlbox zu verwenden.ActiveRecord Scoping mit verschachteltem Objekt
Notebook Modell:
class Notebook < ActiveRecord::Base
has_many :notes
end
Hinweis Modell:
class Note < ActiveRecord::Base
belongs_to :notebook
end
Ich habe mehrere Attribute auf eine Notiz, die wichtige Eigenschaft (für diese) ist note_type
. Vorläufig kann der note_type check_list
, text
oder bookmark
sein.
Mein Ziel ist es so etwas wie dieses Arbeits hat:
Notebooks.notes_without_check_lists
zum Umfang nach unten, so kann ein Benutzer nur Wählen Sie aus dem Drop-Down-Notebooks, die enthalten keine notes
mit den note_type
seiner check_list
. Ich bin nur nicht sicher, wo ich die Iteration über jede note
durchführen sollte, um zu bestimmen, ob es sich um das übergeordnete Element notebook
handelt, das in die Sammlung aufgenommen werden kann.
EDIT
Derzeit habe ich 4 Notebook
Aufzeichnungen. Von den vier Datensätzen enthält nur einer eine Notiz mit dem Notizentyp check_list. Dieses Notizbuch enthält insgesamt zwei Noten, von denen nur einer den Notizentyp check_list
hat. Da dies zutrifft, möchte ich das gesamte Notebook unabhängig von den anderen Notizen im Notizbuch aus dem Anwendungsbereich ausschließen.
Jede Hilfe wird sicherlich geschätzt.
I denke, das ist sehr nahe. Ich bekomme jedoch mehr Datensätze zurück, als die Summe, die ich in der Datenbank habe. Zum Beispiel habe ich insgesamt 4 Notizbuchobjekte, von denen nur eines eine Notiz mit einer Checkliste enthält. Dies gibt alle vier Datensätze sowie eine Kopie des dritten Datensatzes zurück. Ich mache noch mehr Nachforschungen, aber ich wollte dir danken, dass du mich wenigstens irgendwo mit diesem Code versorgt hast. – gr8
Wenn ich 'joins (: notes) .where (Notizen: {note_type: 'check_list'})' verwende, bekomme ich den einen Datensatz zurück, der die Checkliste enthält, so dass das Gegenteil funktioniert. – gr8
@jeepagooster Ich habe die Antwort bearbeitet, notiere den 'group' Teil. Wenn das funktioniert (es wird 100%) stellen Sie sicher, die Antwort zu akzeptieren (achten Sie auf ein Häkchen neben der Antwort Punktzahl) –