Ich habe drei Modelle: Aufgabe, Benutzer und Antwort.Erstellen eines anderen Datensatzes aus dem Modell: schlechte Übung?
Wenn ein Benutzer eine Aufgabe abschließt, werden die Ergebnisse als Antwort gespeichert. Während dieser Antwortzeit erhält ein Benutzer Punkte.
Meine erste Frage ist, wo sollte die Logik für die Aktualisierung der Punkte Attribut gehen? Im Task-, Benutzer- oder Antwortmodell? Momentan habe ich es im Response-Modell, wo es Response.task.points ergreift und diesen Wert zu User.task.points hinzufügt.
Response.create sieht dann aus wie:
# POST /responses
# POST /responses.json
def create
@response = Response.new(response_params)
respond_to do |format|
if @response.save
@response.reward_user
format.html { redirect_to @response, notice: 'Response was successfully created.' }
format.json { render :show, status: :created, location: @response }
else
format.html { render :new }
format.json { render json: @response.errors, status: :unprocessable_entity }
end
end
end
Die zweite Sache ist, dass ich jeden Punkt Transaktion protokolliert werden soll. Also habe ich ein anderes Modell namens points_transaction erstellt. Meine andere Frage ist, wo soll ich die points_transaction erstellen? Im Response.create-Controller? Im Antwortmodell?
Es scheint falsch zu sein, eine PointsTransaction aus der Response create-Methode zu erstellen, aber es scheint auch falsch zu sein, sie innerhalb des Modells zu erstellen. Welcher ist MVC-korrekt?
My Response-Objekt sieht wie folgt aus:
class Response < ApplicationRecord
belongs_to :task, optional: true
belongs_to :user, optional: true
def reward_user
point_value = task.point_value
user.points += point_value
PointTransaction.new({/*params go here*/})
end
end
Sie haben eine gute Frage. Ich denke, Sie haben einen Punkt erreicht, als Sie auf die nächste Stufe Ihrer Architekturlösungen gehen müssen :) – AntonTkachov