هل يمكنني تطبيق القضبان Studter و Getter for سمات لأعمدة DB
-
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