Neuer Fehler in ActiveRecord beim Aktivieren von Benutzern aus Rails c

Früher (bis vor ein paar Monaten) konnte ich Benutzer erstellen mit:

sudo -s
cd /var/discourse
./launcher enter app
rails c
u = User.create(username: "dunderhead", email: "dunderhead@live.com", password: "password")
u.activate

Jetzt schlägt der Aktivierungsschritt mit folgendem Fehler fehl:

[7] pry(main)> u.activate
ActiveRecord::RecordNotSaved: You cannot call create unless the parent is saved
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.8/lib/active_record
/associations/collection_association.rb:342:in `_create_record

Was muss ich tun?

Bekommen Benutzer eine Benutzer-ID, wenn Sie sie erstellen? Ich vermute nicht, aber ich weiß nicht warum.

1 „Gefällt mir“

Nein.

[4] pry(main)> u = User.create(username: "dunderhead", email: "dunderhead@live.com", password: "password")
=> #<User:0x00007fb0c48b17e0
 id: nil,
 username: "dunderhead",
 created_at: nil,
 updated_at: nil,
 name: nil,
 seen_notification_id: 0,
 last_posted_at: nil,
 password_hash: nil,
 salt: nil,
 active: false,
 username_lower: nil,
 last_seen_at: nil,
 admin: false,
 last_emailed_at: nil,
 trust_level: 0,
 approved: false,
 approved_by_id: nil,
 approved_at: nil,
 previous_visit_at: nil,
 suspended_at: nil,
 suspended_till: nil,
 date_of_birth: nil,
 views: 0,
 flag_level: 0,
 ip_address: nil,
 moderator: false,
 title: nil,
 uploaded_avatar_id: nil,
 locale: nil,
 primary_group_id: nil,
 registration_ip_address: nil,
 staged: false,
 first_seen_at: nil,
 silenced_till: nil,
 group_locked_trust_level: nil,
 manual_locked_trust_level: nil,
 secure_identifier: nil,
 last_digest_at: nil,
 flair_group_id: nil,
 last_seen_reviewable_id: nil,
 password_algorithm: nil>

Ich habe versucht, den Benutzer vor der Aktivierung zu speichern, wie die Fehlermeldung vorschlug, aber ohne Erfolg. Ich weiß nicht, was die Fehlermeldung mit “parent” meint.

[5] pry(main)> u.save
=> false
[6] pry(main)> u.activate
ActiveRecord::RecordNotSaved: You cannot call create unless the parent is saved
from /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.8/lib/active_record/
associations/collection_association.rb:342:in `_create_record'

Sie scheitern hier bei der Validierung, deshalb.\n\nz.B. ist das Passwort zu kurz.\n\nSie können die Ausnahme weitergeben, indem Sie Folgendes tun:\n\n\nu.save!\n\n\nwas z.B. ergibt:\n\n\nActiveRecord::RecordInvalid: Validation failed: Password is too short (minimum is 10 characters)\nfrom /home/robert/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/activerecord-7.0.8.1/lib/active_record/validations.rb:80:in `raise_validation_error'\n\n\nEin schnellerer Weg, dorthin zu gelangen, wäre gewesen, ein Ausrufezeichen nach dem create hinzuzufügen:\n\n\n u = User.create!(username: \"dunderhead\", email: \"dunderhead@live.com\", password: \"password\")\n\n\nEine ID wird erst zugewiesen, wenn Sie dem Objekt vollständig gültige Attribute geben, entweder beim Erstellen oder beim Speichern, nachdem Sie sie korrigiert haben.\n\nNur wenn Sie ein instanziiertes Objekt haben, können Sie Methoden darauf ausführen.

4 „Gefällt mir“

Danke Leute, das Passwort war zu kurz. Alles wieder gut.

1 „Gefällt mir“

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.