هل يمكنني تطبيق القضبان Studter و Getter for سمات لأعمدة DB

StackOverflow https://stackoverflow.com/questions/1906702

  •  19-09-2019
  •  | 
  •  

سؤال

في القضبان يمكننا الوصول إلى عمود DB من خلال القضبان الصفات المقدمة، ولكن هل يمكننا تغيير هذا؟ على سبيل المثال، لدي DB مع عمود الاسم، هل يمكنني تطبيق شيء مثل.

def name
  "sir" + name
end

جربته، لكنها تؤدي إلى تجاوز مكدس. هناك طريقة لإنجاز هذا.

أكثر سؤالا، هل هناك أي فرق بين الاسم واللاسم.

هل كانت مفيدة؟

المحلول

def name
  "sir" + read_attribute(:name)
end

ولكن تجنب هذه الممارسة. استخدم Getter / Setter إضافية بدلا من ذلك، والمعروف أيضا باسم "السمة الظاهرية". لمزيد من المعلومات قراءة هذه الإجابة: تزيين سمة في القضبان

في حالتك، هناك أيضا تأثير جانبي غريب. في كل مرة يتم فيها الوصول إلى السمة، فإنه يلفظ الاسم. بعد 3 مكالمات، في نهاية المطاف

"sir sir sir name"

في الواقع، يمكنك القيام به

def name
  n = read_attribute(:name)
  if /^sir/.match(name)
    n
  else
    "sir #{n}"
  end
end

ولكن، على محمل الجد، لا تفعل هذا.

نصائح أخرى

إذا كنت على دراية بالمضاعفات المحتملة، ولكن لا تزال بحاجة إلى القيام بذلك، ثم:

def name
  "sir" + self[:name]
end

يستخدم super

طرق طرح روبي

يحتوي على الكثير من الشرح ولكني أعتقد أنه بسيط مثل استدعاء الطريقة التي تم تعريفها بالفعل

def name
  "sir #{super}"
end
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top