خطأ جديد في ActiveRecord عند تفعيل المستخدم من Rails c

في السابق (حتى قبل بضعة أشهر)، كنت قادرًا على إنشاء مستخدمين باستخدام:

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

الآن تفشل خطوة التفعيل مع:

[7] pry(main)> u.activate
ActiveRecord::RecordNotSaved: لا يمكنك استدعاء create إلا إذا تم حفظ الكائن الأصل
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

ما الذي أحتاج إلى فعله؟

هل يحصل المستخدم على معرف مستخدم عند إنشائه؟ أشك في ذلك، لكنني لا أعرف السبب.

إعجاب واحد (1)

لا.

[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>

لقد حاولت حفظ المستخدم قبل التفعيل، كما اقترح الخطأ، ولكن دون جدوى. لا أعرف ماذا يعني الخطأ “parent”.

[5] pry(main)> u.save
=> false
[6] pry(main)> u.activate
ActiveRecord::RecordNotSaved: لا يمكنك الاستدعاء create إلا إذا تم حفظ العنصر الأب
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'

أنت تفشل في التحقق هنا، ولهذا السبب.
على سبيل المثال، كلمة المرور قصيرة جدًا.

يمكنك تصعيد الاستثناء عن طريق القيام بما يلي:

u.save!

مما يعطي، على سبيل المثال:

ActiveRecord::RecordInvalid: Validation failed: Password is too short (minimum is 10 characters)
from /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'

طريقة أسرع للوصول إلى ذلك كانت إضافة علامة تعجب بعد الإنشاء:

 u = User.create!(username: "dunderhead", email: "dunderhead@live.com", password: "password")

لن يتم تعيين معرف حتى تقوم بتوفير سمات صالحة بالكامل للكائن، إما عند الإنشاء أو عند الحفظ بعد إصلاحها.
فقط عندما يكون لديك كائن مُنشأ يمكنك المتابعة لتشغيل الأساليب عليه.

4 إعجابات

شكرا لكم يا رفاق، كانت كلمة المرور قصيرة جدًا. كل شيء على ما يرام الآن.

إعجاب واحد (1)

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