Als Teil eines Projekts habe ich ein Session
Modell erstellt, um die Daten zu speichern, wenn es zuerst erstellt und aktualisiert wurde (mit dem timestamps
Plugin von Sequel zur Verfügung gestellt). Dies erleichtert die serverseitige Behandlung von Sitzungstimeouts. Die Spalte updated_at kann mit Sequels touch
-Plugin aktualisiert werden, das eine äquivalente Methode bereitstellt.NoExistingObject Ausnahme bei Verwendung Sequel :: Model.plugin Zeitstempel und berühren
jedoch bei dem Versuch, es zu benutzen, ich die folgenden Fehlermeldung
Sequel :: NoExistingObject: Versuch Objekt zu aktualisieren nicht in einer einzigen Zeile Änderung ergeben hat (SQL: UPDATE
sessions
SETupdated_at
= ‚2016 -07-01 12: 17: 06.373469 'WHERE (id
= 14))
von/Benutzer/[GEFILTERTER NUTZERNAME] /. Rbenv/versions/2.3.1/lib/ruby / edelsteine / 2.3.0/edelsteine / fortsetzung -4.35.0/lib/sequel/model/base.rb: 2018: in_update'
_update_columns '
from /Users/[FILTERED USERNAME]/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/sequel-4.35.0/lib/sequel/model/base.rb:2011:in
von/Benutzer/[GEFILTERTER BENUTZERNAME] /. Rbenv/versions/2.3.1/lib/ruby / gems/2.3.0 /gems/sequel-4.35.0/lib/sequel/ model/base.rb: 1965: inblock (2 levels) in _save'
around_update '
from /Users/[FILTERED USERNAME]/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/sequel-4.35.0/lib/sequel/model/base.rb:1146:in
von/Benutzer/[GEFILTERTER BENUTZERNAME] /. rbenv/versions/2.3.1/lib/ruby / edelsteine / 2.3.0/edelsteine / fortsetzung-4.35.0/lib/sequel/model/base.rb: 1949: inblock in _save'
around_save '
from /Users/[FILTERED USERNAME]/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/sequel-4.35.0/lib/sequel/model/base.rb:1146:in
aus/Benutzer/[GEFILTERTER BENUTZERNAME] /. rbenv/versions/2.3.1/lib/ruby / edelsteine / 2.3.0/edelsteine / sequel- 4.35.0/lib/sequel/model/base.rb: 1935: in_save'
block (2 levels) in save '
from /Users/[FILTERED USERNAME]/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/sequel-4.35.0/lib/sequel/model/base.rb:1587:in
von/Benutzer/[GEFILTERTER BENUTZERNAME] /. Rbenv/versions/2.3.1/lib/ruby / Edelsteine / 2.3.0/Edelsteine / Fortsetzung/4.35.0/lib/Folge/Modell/base.rb: 2089: inblock in checked_transaction'
_transaction '
from /Users/[FILTERED USERNAME]/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/sequel-4.35.0/lib/sequel/database/transactions.rb:163:in
von/Benutzer/[GEFILTERTER BENUTZERNAME] /. rbenv/versions/2.3.1/lib/ruby / Edelsteine / 2.3.0/Edelsteine / Folge-4.35.0/lib/Folge/Datenbank/Transaktionen.rb: 138: inblock in transaction'
block in '
from /Users/[FILTERED USERNAME]/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/sequel-4.35.0/lib/sequel/database/connecting.rb:251:in
von/Users/[GEFILTERTER USERNAME] /. Rbenv/versions/2.3.1/lib/ruby / edelsteine / 2.3.0/edelsteine / 4.35.0/lib/sequel/connection_pool/threaded .rb: 105: inhold'
synchronisieren '
from /Users/[FILTERED USERNAME]/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/sequel-4.35.0/lib/sequel/database/connecting.rb:251:in
von/Benutzer/[GEFILTERTER BENUTZERNAME] /. rbenv/versions/2.3.1/lib/ruby / gems/2.3.0/gems/sequel-4.35.0/lib/Fortsetzung /database/transactions.rb:104:intransaction'
checked_transaction '
from /Users/[FILTERED USERNAME]/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/sequel-4.35.0/lib/sequel/model/base.rb:2089:in
... 7 Stufen ...
von/Benutzer/[GEFILTERTER BENUTZERNAME] /. rbenv/versions/2.3.1/lib/ruby / gems/2.3 .0/gems/railties-4.2.6/lib/rails/commands/console.rb: 9: instart'
Konsole ' von/Benutzer/[GEFILTERTER BENUTZERNAME] /. Rbenv/versions/2.3.1/lib/ruby / Edelsteine / 2.3.0/Edelsteine / Eisenbahnen-4.2.6/lib/Schienen/Befehle/Befehle_Tasks.RB: 39: in
from /Users/[FILTERED USERNAME]/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/railties-4.2.6/lib/rails/commands/commands_tasks.rb:68:inrun_command!' from /Users/[FILTERED USERNAME]/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/railties-4.2.6/lib/rails/commands.rb:17:in
' von/Benutzer/[GEFILTERTER BENUTZERNAME] /. Rbenv/versions/2.3.1/lib/ruby / edelsteine / 2.3.0/edelsteine / ativesupport-4.2.6/lib/active_support/dependencies.rb: 274: inrequire' from /Users/[FILTERED USERNAME]/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-4.2.6/lib/active_support/dependencies.rb:274:in
block in require ' von/Benutzer/[GEFILTERTER BENUTZERNAME] /. Rbenv/versions/2.3.1/lib/ruby / edelsteine / 2.3.0/gems/activesupport-4.2.6/lib/active_support/dependencies.rb: 240: inload_dependency' from /Users/[FILTERED USERNAME]/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-4.2.6/lib/active_support/dependencies.rb:274:in
require ' von/Benutzer/[GEFILTERTER BENUTZERNAME]/Sync/RubymineProjects/[GEFILTERTER PROJEKTNAME]/bin/rails: 9: in lade' von/Users/[FILTERED USERNAME] /. Rbenv/versions /2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-4.2.6/lib/active_support/dependencies.rb:268:inblock in load' from /Users/[FILTERED USERNAME]/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activesupport-4.2.6/lib/active_support/dependencies.rb:240:in
load_dependency ' von/Benutzer/[GEFILTERTER BENUTZERNAME] /. Rbenv/Versionen/2.3.1/lib/Ruby/Edelsteine / 2.3.0/Edelsteine / Activesupport-4.2.6/lib/active_support/Abhängigkeiten.r b: 268: inload' from /Users/[FILTERED USERNAME]/.rbenv/versions/2.3.1/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in
requires ' von/Benutzer/[GEFILTERTER BENUTZERNAME] /. rbenv/versions/2.3.1/lib/ruby / site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb: 55: inrequire' from -e:1:in
'
Ich habe bereits versucht, unter Verwendung der Sequel::Model.update
und Sequel::Model.update_all
Methoden, jedoch ohne Erfolg (der gleiche Fehler empfangen).
Interessant ist, dass ich in der Lage bin, die SQL-Abfrage, die oben produziert wurde, über die Befehlszeile sowohl mit SQLite als auch mit MySQL auszuführen.
==== app/models/session.rb ====
class Session < Sequel::Model
plugin :validation_helpers
plugin :timestamps
plugin :touch
def before_update
self.touch
end
def before_save
Session.where(user_id: self.user_id).delete
end
def self.sweep(time = 2.hours)
time = time.split.inject { |count, unit| count.to_i.send(unit) } if time.is_a?(String)
Session.where("updated_at < '#{time.ago.to_s(:db)}' OR created_at < '#{1.day.ago.to_s(:db)}'").delete
end
def validates
validates_presence [:user_id]
end
end
Dank Voraus für jede Hilfe zur Verfügung gestellt.