Ich habe einen wiederholten Codeblock, der einige Variablen in einer Reihe von verschiedenen Controller-Methoden initialisiert. Gibt es eine Möglichkeit für mich, dieses DRY mit einer Modellmethode zu machen, anstatt den gleichen Codeblock in jeder Controller-Methode zu wiederholen?Ruby on Rails: DRY einen wiederholten Codeblock, der einige Variablen initialisiert
Grundsätzlich ist es für eine soziale Website, und es zieht die Freundesliste eines Benutzers hoch und erstellt dann Buckets mit Freunden basierend auf den Berechtigungen des Benutzers, die in einem Freundschaftsmodell gespeichert sind. Diese wiederholte Initialisierung von Buckets ist, was ich versuche, DRY zu machen. Normalerweise würde ich eine Modellmethode verwenden, aber in diesem Fall werden 3 separate Variablen basierend auf einer Datenbankabfrage initialisiert, und dies wird oft genug genannt, ich möchte es nicht unnötig ineffizient machen, indem ich die Datenbank 3 anstoße mal. In C würde ich nur Zeiger verwenden, die als Variablen übergeben werden.
Es geht ungefähr so:
def example_method
friendships = @user.friendships
view_permission_friends = []
write_permission_friends = []
message_permission_friends = []
for friendship in friendships
if friendship.view_permission then view_permission_friends << friendship.friend_id end
if friendship.write_permission then write_permission_friends << friendship.friend_id end
if friendship.message_permission then message_permission_friends << friendship.friend_id end
end
#Do something with the 3 initialized arrays here
end
Ich denke, dass ich in meiner Frage, die ich überarbeitet habe, unklar gewesen sein könnte. Ich versuche, die wiederholte Verwendung dieses gesamten Blocks in jeder Controller-Methode auszutrocknen, anstatt den Block selbst zu optimieren. Es ist okay, das Array-Gebäude in separate Zeilen aufzuteilen. Obwohl Sie Recht haben, wenn ich einen Hash von einer Modellmethode zurückgeben würde, würde ich nur die Arrays in den Hash stecken. Ist das der beste Weg, dies zu tun? –