اذهب إلى المحتوى

السؤال

نشر (معدل)

لدي الكود التالي على إطار العمل 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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...