Ich habe einen Bereich, der als Filter fungiert. Zum Beispiel:
%Vor% Da in_good_standing
von mehr als einer Bedingung abhängt, möchte ich, dass dies für eine Instanz von User
als definiert ist:
Ich möchte jedoch wirklich vermeiden, die Logik zwischen der Instanzmethode und dem benannten Bereich zu duplizieren. Gibt es eine Möglichkeit, #in_good_standing?
auf eine Weise zu definieren, die sich einfach auf den Bereich bezieht?
Ich erkenne, dass dies sehr unterschiedliche Konzepte sind (eine ist eine Klassenmethode, eine ist eine Instanzmethode), daher meine Frage. Wie @MrDanA in einem Kommentar erwähnt, ist die nächste, die ich bekommen kann, zu überprüfen, ob der Datensatz, über den ich neugierig bin, im größeren Rahmen existiert, was wahrscheinlich die Antwort ist, nach der ich suche.
Die Antworten zum Trennen verschiedener Bereiche von meinem Beispiel sind nützlich, aber ich suche nach einem allgemeinen Muster, das auf eine Anwendung angewendet werden kann, wobei einige sehr komplizierte Logik durch Bereiche gesteuert wird.
Hinzufügen meines ursprünglichen Kommentars als Antwort:
Wie @meagar sagte, können Sie das nicht, weil sie sehr unterschiedliche Dinge tun. Das Maximum, was Sie tun können, ist, dass Ihre Instanzmethode den Bereich aufruft und überprüft, ob es Teil der zurückgegebenen Ergebnisse ist. Dies funktioniert jedoch nicht, wenn die Instanz noch nicht gespeichert wurde. Also in Ihrer Methode könnten Sie tun:
%Vor%Nein, ist es nicht. Einer erstellt eine Datenbankabfrage, einer arbeitet mit Mitgliedern eines instanziierten Objekts.
Scopes
sind nichts als class methods
. Sie können dies so definieren
Hinzufügen meines ursprünglichen Kommentars als Antwort:
Wie @meagar sagte, können Sie das nicht, weil sie sehr unterschiedliche Dinge tun. Das Maximum, was Sie tun können, ist, dass Ihre Instanzmethode den Bereich aufruft und überprüft, ob es Teil der zurückgegebenen Ergebnisse ist. Dies funktioniert jedoch nicht, wenn die Instanz noch nicht gespeichert wurde. Also in Ihrer Methode könnten Sie tun:
%Vor%Wenn Sie dies wirklich DRY wollen, müssen Sie wahrscheinlich eine Klassenmethode anstelle eines Bereichs verwenden (wie pavan darauf anspielt). Die Klassenmethode kann genauso wie ein Bereich funktionieren und Sie können ein gemeinsames Codebeispiel zur Bestimmung der Attribute und Werte verwenden (z. B. eine Hash-Konstante?).
Aber ich würde empfehlen, dies zu tun. Dieses Abstraktionsniveau zugunsten der DRYness mag etwas übertrieben sein. Es scheint mir, dass Ihre Instanzmethode in einfachere Nachrichten aufgeteilt werden könnte, z. %code% und %code% . Auch, weil das Vergleichen von Streichern generell schlecht / spröde ist. Wie auch immer, im Allgemeinen würde ich erwarten, dass Sie Ihre Objektmethoden und Bereiche anders entwickeln würden. Bereiche sind die Art, wie sie sind, weil Sie eine Datenbank abfragen. Sei also dafür, aber lass deine Objekte weiterhin die bestmöglichen Nachrichten weitergeben!
Ich habe einen Bereich, der als Filter fungiert. Zum Beispiel:
%Vor%Da %code% von mehr als einer Bedingung abhängt, möchte ich, dass dies für eine Instanz von %code% als definiert ist:
%Vor%Ich möchte jedoch wirklich vermeiden, die Logik zwischen der Instanzmethode und dem benannten Bereich zu duplizieren. Gibt es eine Möglichkeit, %code% auf eine Weise zu definieren, die sich einfach auf den Bereich bezieht?
Ich erkenne, dass dies sehr unterschiedliche Konzepte sind (eine ist eine Klassenmethode, eine ist eine Instanzmethode), daher meine Frage. Wie @MrDanA in einem Kommentar erwähnt, ist die nächste, die ich bekommen kann, zu überprüfen, ob der Datensatz, über den ich neugierig bin, im größeren Rahmen existiert, was wahrscheinlich die Antwort ist, nach der ich suche.
Die Antworten zum Trennen verschiedener Bereiche von meinem Beispiel sind nützlich, aber ich suche nach einem allgemeinen Muster, das auf eine Anwendung angewendet werden kann, wobei einige sehr komplizierte Logik durch Bereiche gesteuert wird.
Nein, ist es nicht. Einer erstellt eine Datenbankabfrage, einer arbeitet mit Mitgliedern eines instanziierten Objekts.
%code% sind nichts als %code% . Sie können dies so definieren
%Vor%Hinzufügen meines ursprünglichen Kommentars als Antwort:
Wie @meagar sagte, können Sie das nicht, weil sie sehr unterschiedliche Dinge tun. Das Maximum, was Sie tun können, ist, dass Ihre Instanzmethode den Bereich aufruft und überprüft, ob es Teil der zurückgegebenen Ergebnisse ist. Dies funktioniert jedoch nicht, wenn die Instanz noch nicht gespeichert wurde. Also in Ihrer Methode könnten Sie tun:
%Vor%Wenn Sie dies wirklich DRY wollen, müssen Sie wahrscheinlich eine Klassenmethode anstelle eines Bereichs verwenden (wie pavan darauf anspielt). Die Klassenmethode kann genauso wie ein Bereich funktionieren und Sie können ein gemeinsames Codebeispiel zur Bestimmung der Attribute und Werte verwenden (z. B. eine Hash-Konstante?).
Aber ich würde empfehlen, dies zu tun. Dieses Abstraktionsniveau zugunsten der DRYness mag etwas übertrieben sein. Es scheint mir, dass Ihre Instanzmethode in einfachere Nachrichten aufgeteilt werden könnte, z. %code% und %code% . Auch, weil das Vergleichen von Streichern generell schlecht / spröde ist. Wie auch immer, im Allgemeinen würde ich erwarten, dass Sie Ihre Objektmethoden und Bereiche anders entwickeln würden. Bereiche sind die Art, wie sie sind, weil Sie eine Datenbank abfragen. Sei also dafür, aber lass deine Objekte weiterhin die bestmöglichen Nachrichten weitergeben!
Ich habe einen Bereich, der als Filter fungiert. Zum Beispiel:
%Vor%Da %code% von mehr als einer Bedingung abhängt, möchte ich, dass dies für eine Instanz von %code% als definiert ist:
%Vor%Ich möchte jedoch wirklich vermeiden, die Logik zwischen der Instanzmethode und dem benannten Bereich zu duplizieren. Gibt es eine Möglichkeit, %code% auf eine Weise zu definieren, die sich einfach auf den Bereich bezieht?
Ich erkenne, dass dies sehr unterschiedliche Konzepte sind (eine ist eine Klassenmethode, eine ist eine Instanzmethode), daher meine Frage. Wie @MrDanA in einem Kommentar erwähnt, ist die nächste, die ich bekommen kann, zu überprüfen, ob der Datensatz, über den ich neugierig bin, im größeren Rahmen existiert, was wahrscheinlich die Antwort ist, nach der ich suche.
Die Antworten zum Trennen verschiedener Bereiche von meinem Beispiel sind nützlich, aber ich suche nach einem allgemeinen Muster, das auf eine Anwendung angewendet werden kann, wobei einige sehr komplizierte Logik durch Bereiche gesteuert wird.
Nein, ist es nicht. Einer erstellt eine Datenbankabfrage, einer arbeitet mit Mitgliedern eines instanziierten Objekts.
good_some_val?
sind nichts als good_some_other_val?
. Sie können dies so definieren
Hinzufügen meines ursprünglichen Kommentars als Antwort:
Wie @meagar sagte, können Sie das nicht, weil sie sehr unterschiedliche Dinge tun. Das Maximum, was Sie tun können, ist, dass Ihre Instanzmethode den Bereich aufruft und überprüft, ob es Teil der zurückgegebenen Ergebnisse ist. Dies funktioniert jedoch nicht, wenn die Instanz noch nicht gespeichert wurde. Also in Ihrer Methode könnten Sie tun:
%Vor%Wenn Sie dies wirklich DRY wollen, müssen Sie wahrscheinlich eine Klassenmethode anstelle eines Bereichs verwenden (wie pavan darauf anspielt). Die Klassenmethode kann genauso wie ein Bereich funktionieren und Sie können ein gemeinsames Codebeispiel zur Bestimmung der Attribute und Werte verwenden (z. B. eine Hash-Konstante?).
Aber ich würde empfehlen, dies zu tun. Dieses Abstraktionsniveau zugunsten der DRYness mag etwas übertrieben sein. Es scheint mir, dass Ihre Instanzmethode in einfachere Nachrichten aufgeteilt werden könnte, z. %code% und %code% . Auch, weil das Vergleichen von Streichern generell schlecht / spröde ist. Wie auch immer, im Allgemeinen würde ich erwarten, dass Sie Ihre Objektmethoden und Bereiche anders entwickeln würden. Bereiche sind die Art, wie sie sind, weil Sie eine Datenbank abfragen. Sei also dafür, aber lass deine Objekte weiterhin die bestmöglichen Nachrichten weitergeben!
Ich habe einen Bereich, der als Filter fungiert. Zum Beispiel:
%Vor%Da %code% von mehr als einer Bedingung abhängt, möchte ich, dass dies für eine Instanz von %code% als definiert ist:
%Vor%Ich möchte jedoch wirklich vermeiden, die Logik zwischen der Instanzmethode und dem benannten Bereich zu duplizieren. Gibt es eine Möglichkeit, %code% auf eine Weise zu definieren, die sich einfach auf den Bereich bezieht?
Ich erkenne, dass dies sehr unterschiedliche Konzepte sind (eine ist eine Klassenmethode, eine ist eine Instanzmethode), daher meine Frage. Wie @MrDanA in einem Kommentar erwähnt, ist die nächste, die ich bekommen kann, zu überprüfen, ob der Datensatz, über den ich neugierig bin, im größeren Rahmen existiert, was wahrscheinlich die Antwort ist, nach der ich suche.
Die Antworten zum Trennen verschiedener Bereiche von meinem Beispiel sind nützlich, aber ich suche nach einem allgemeinen Muster, das auf eine Anwendung angewendet werden kann, wobei einige sehr komplizierte Logik durch Bereiche gesteuert wird.
Tags und Links ruby-on-rails activerecord named-scope