Der Autor dieses Artikels ist ein Anfänger, der gerade erst anfängt, Programmieren zu lernen. Ich würde mich freuen, wenn Sie auf Fehler hinweisen könnten.
Dieser Artikel ist eine persönliche Notiz von dem, was ich durch Lesen des Ruby on Rails 6 Practical Guide gelernt habe. Es scheint schwer zu lesen zu sein, da es auszugsweise und aufgegriffen ist. Entschuldigung. Dieses Buch hat auch eine Fortsetzung Erweiterung, und beide wurden zum Zeitpunkt des Schreibens des Artikels untersucht. Ich werde auch einen Artikel zur Überprüfung schreiben. Ich werde cp1 und cp2 der Funktionserweiterung überspringen, weil sie die Umgebungskonstruktion und den Code des Hauptteils erklären.
Vorheriger Artikel Ruby on Rails6 - Praktischer Leitfaden cp4 ~ cp6 [Memo] Ruby on Rails6 - Praktischer Leitfaden cp7 ~ cp9 [Memo] Ruby on Rails6 - Praktischer Leitfaden cp10 ~ cp12 [Memo] Ruby on Rails6 - Praktischer Leitfaden cp13 ~ cp15 [Memo] Ruby on Rails6 - Praktischer Leitfaden cp16 ~ cp18 [Memo]
Die Methode add_index generiert standardmäßig einen Namen wie folgt:
Der Name des Index ist jedoch begrenzt. Wenn Sie also eine große Anzahl von Spalten als zusammengesetzten Index kombinieren, können Sie die Grenze überschreiten. In solchen Fällen müssen Sie den Indexnamen mit der Option name angeben.
add_index :customers, [ :birth_year, :family_name_kana, :given_name_kana ],
name: "index_customers_on_birth_year_and_furigana"
Wenn für die Spalten X, Y und Z ein zusammengesetzter Index festgelegt ist, wird dieser zusammengesetzte Index nur für die Suche nach Spalte X, für Suchvorgänge mit den Spalten X und Y und für Suchvorgänge mit drei Spalten verwendet. Dieser zusammengesetzte Index wird jedoch nicht für eine Suche nach Spalte Y allein, eine Suche nach Spalte Z allein oder eine Suche nach einer Kombination von Spalten Y und Z verwendet. Um die Suche für alle Kombinationen zu optimieren, müssen Sie den Index wie folgt einstellen.
Beide Methoden geben null zurück, wenn der Empfänger null ist, aber das Verhalten unterscheidet sich geringfügig, wenn der Empfänger nicht null ist. Wenn Sie versuchen, eine Methode aufzurufen, die im Empfänger nicht mit & definiert ist, tritt NoMethodError auf. Wenn dies jedoch versucht wird, wird nil zurückgegeben.
user&.name
user.try(:name)
Wenn im obigen Beispiel die Instanzmethode des Benutzers keinen Namen hat, tritt NoMethodError nur auf, wenn &. Verwendet wird.
attr_accessor :name, :gender, :birthday
def search
rel = User
rel = rel.where(name: name) if name.present?
rel = rel.where(gender: gender) if gender.present?
rel = rel.where(birthday: birthday) if birthday.present?
rel = rel.order(:name)
end
Der obige Code ist ein Formularobjekt. Definiert ein Suchobjekt, das Suchergebnisse zurückgibt. Da where und order ein Relation-Objekt zurückgeben, können Sie verschiedene Suchbedingungen im Relation-Objekt wie im obigen Code speichern.
rel = rel.joins(:articles)
rel = rel.where("articles.title" => title) if title.present?
Die Joins-Methode führt einen Tabellen-Join </ strong> durch. Mit Tabellenverknüpfungen können Sie Datensätze basierend auf Spaltenwerten in anderen Tabellen filtern. Das Argument der Joins-Methode ist der Name der Zuordnung. Diese Methode gibt auch ein Relation-Objekt zurück. Wenn Sie einer Tabelle beitreten, können Sie nach anderen Tabellen wie dem Code in der zweiten Zeile suchen.
rel = rel.distinct
Sie können Duplikate aus den Suchergebnissen entfernen, indem Sie die eindeutige Methode aufrufen.
cookies
cookies.signed[:user_id] = user.id
Durch Aufrufen der signierten Methode wird der Cookie-Wert unlesbar und unveränderlich.
cookies.permanent.signed[:user_id] = user.id
Die permanente Methode legt das Ablaufdatum des Cookies nach 20 Jahren fest.
cookies.delete(:user_id)
Sie können die im Cookie aufgezeichnete ID mit dem obigen Code löschen.
expect(response.cookies).to have_key("customer_id")
expect(response.cookies["customer_id"]).to match(/[0-9a-f]{40}\z/)
In der ersten Zeile wird geprüft, ob das Cookie einen Schlüssel namens "customer_id" enthält. In der zweiten Zeile wird geprüft, ob der Cookie-Wert deaktiviert ist. Nicht sichtbare Cookies haben die Eigenschaft, am Ende eine 40-stellige Hexadezimalzahl zu haben. Daher untersuchen wir dies mithilfe regulärer Ausdrücke.
validates :octet1, numericality: { only_integer: true },
inclusion: { in: 0..255 }
Die Numerizität überprüft, ob der Wert nur eine Zahl ist. Wenn Sie für only_integer true angeben, werden nur Ganzzahlen abgeglichen. Allein mit Einbeziehung wird eine Zeichenfolge wie "XYZ" in die Ganzzahl 0 geändert, sodass kein Fehler auftritt. Die Numerizität führt zu einem Fehler, da der Wert vor der Konvertierung überprüft wird.
Rails Guide enthält weitere Details.
Viele-zu-viele-Assoziationen können mithilfe einer Verknüpfungstabelle in eine Kombination aus zwei Eins-zu-viele-Assoziationen unterteilt werden.
number_with_delimiter(100000)
100.000 werden zurückgegeben.
Wenn ein Kunde und ein Programm eine Viele-zu-Viele-Beziehung haben,
program.cusotmers.count
Sie können die Anzahl der Programmteilnehmer wie folgt zählen. Die Leistung wird jedoch schlechter, da eine komplizierte Abfrage mit JOIN ausgegeben wird.
Dies ist auch dann der Fall, wenn Sie die Verknüpfungstabellenanwendungen (Einträge) zählen, sodass Sie auch wie folgt schreiben können.
program.entries.count
Durch Zählen der Anzahl der verknüpften Tabellen wird die Ausgabe komplexer Abfragen verhindert und die Leistung verbessert.
Mit dem obigen Code wird die Anzahl der Bewerber für jedes Programm gezählt, sodass ein "N + 1-Problem" vorliegt. Mit dem folgenden Code können Sie die Anzahl der Bewerber für jedes Programm mit einer einzigen Abfrage ermitteln.
Program.joins(:entries)
.select("programs.*, COUNT(entries.id) AS number_of_applicants")
.group("programs.id")
Geben Sie den Namen der Zuordnung im Argument joins an. Es ist kein Tabellenname. Geben Sie im Argument der Methode select die Spalte an, um den Wert aus der Tabelle abzurufen. Die SQL-Funktion COUNT gibt die Anzahl der Datensätze zurück, in denen der im Argument angegebene Spaltenwert nicht NULL ist. Da AS den Wert auf der linken Seite benennt, können Sie die Anzahl der Datensätze in der Eintragstabelle als Spalte mit der Bezeichnung number_of_applicants abrufen. Die Gruppenmethode unterteilt Datensätze basierend auf der im Argument angegebenen Spalte in Gruppen. Wenn eine Aggregatfunktion wie COUNT zur Auswahl angegeben wird, ist im Prinzip ein Aufruf erforderlich. Durch Aufteilen in Gruppen können Sie die Anzahl der Einträge für jede program_id ermitteln.
program[:number_of_applicants]
Sie können sich wie oben darauf beziehen.
Wenn Sie Tabellen normalerweise mit der Joins-Methode verknüpfen, werden Datensätze, auf die in der verknüpften Tabelle überhaupt nicht verwiesen wird, aus den Suchergebnissen ausgeschlossen. Mit anderen Worten, es werden nur Programme durchsucht, für die ein oder mehrere Anträge eingereicht wurden.
left_joins(:entries)
Wenn Sie Verknüpfungen mit left_joins neu schreiben, bleiben nicht referenzierte Datensätze erhalten.
Wir werden die URLs der folgenden Artikel einzeln hinzufügen.
Ruby on Rails6 - Praktischer Leitfaden [Erweiterungen] cp7 ~ cp9 [Memo] Ruby on Rails6 - Praktischer Leitfaden [Erweiterungen] cp10 ~ cp12 [Memo]
Recommended Posts