• 0

كيف أستعمل after_create مع devise على Rails؟

لدي الكود التالي على إطار العمل Rails:

class User < ActiveRecord::Base
  after_create :set_user_full_name
  .........
private

  def set_user_full_name
    self.name = "Test name"
  end
end

لكن عند إنشائي مستخدم user أحصل على name بقسمة null, وَ عند محاولتي تحديث هذه الخاصية، بالطريقة التالية:

devise_parameter_sanitizer.for(:sign_up) << [:name]
devise_parameter_sanitizer.for(:account_update) << [:name]

لكن لا أتوصل لذلك، فهل من حل للمشكل؟

تمّ تعديل بواسطة محمد بوسكوري

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

لتوضيح المفهوم فـ after_create تعمل بعد حدث إدخال بيانات إلى قاعدة البيانات.

و في كود الحقل name لم يتم تخزينه بعد:

user = User.create(some_attiributes)
user.name     #=> "Test name"

user.reload
user.name     #=> nilمما يحتم إعطاءه القيمة 

في حال أردت إدخال قيمة name في قاعدة البيانات استعمل before_create والتي تعمل عكس الوظيفة السابقة أي قبل عملية التخزين في db.

مثال، لنفترض وجود حقلين first_name و last_name:

before_create :set_user_full_name

def set_user_full_name
    self.name = "#{first_name} #{last_name}"
end

كحالة من الممكن الوقوع فيها، وهي عدم توفر المستخدم على قيم لـ fisrt_name  و last_name، يمكننا استخدام الكود التالي لتفادي أي نوع من رفع excepton  من خلال المتحكم Controller:

class Users::RegistrationsController < Devise::RegistrationsController
  before_filter :set_name_param, only: [:create]

  private
  def set_name_param
    params[:user][:name] = "#{params[:user][:first_name]} #{params[:user][:last_name]}"
  end
end

 

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن