Wenn Sie einen neuen Datensatz mit Rails hinzufügen, kann es vorkommen, dass Sie automatisch eine eindeutige ID zuweisen möchten. Geben Sie beispielsweise den Maximalwert +1 des Felds my_id an.
Ich habe ein Beispiel geschrieben, das bei der Registrierung des Raumnamens eine eindeutige ID = my_id angibt.
def assign
my_id = -1
room = Room.find_by(room: params[:room])
if !room.nil?
my_id = room.my_id
else
Room.connection.execute(
"INSERT INTO rooms (my_id, room, created_at, updated_at) SELECT COALESCE(max(my_id), 0)+1, '#{params[:room]}', '#{Time.now}', '#{Time.now}' from rooms"
)
my_id = Room.find_by(roomr: params[:room]).my_id
end
redirect_to("/rooms/#{my_id}")
end
Der Punkt ist
def assign
my_id = -1
room = Room.find_by(room: params[:room])
if !room.nil?
my_id = room.my_id
else
new_room = Room.create(
my_id: Room.max(my_id) + 1,
room: params[:room]
)
my_id = new_room.my_id
end
redirect_to("/rooms/#{my_id}")
end
Im Fehlerfall zwischen Transaktion starten und Transaktion festschreiben
Wird ausgestellt, Unzureichender Ausschluss, wenn mehrere Clients gleichzeitig die Zuweisung anrufen my_id wird dupliziert
Ich möchte wirklich in ActiveRecord schreiben, ohne unformatiertes SQL auszugeben. Gibt es keinen guten Weg?
Bringen Sie den maximalen Spaltenwert +1 zum Zeitpunkt des EINFÜGENS mit Ich möchte MAX + 1 gleichzeitig mit der INSERT-Anweisung ausführen. Ich möchte Daten registrieren und max zum Zeitpunkt von INSERT ausgeben Um sicherzustellen, dass ActiveRecord find_or_create_by ausgeführt wird
Recommended Posts