اذهب إلى المحتوى
  • 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]

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

تم التعديل في بواسطة محمد بوسكوري
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 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

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...