================================================== =========================
আপডেট: জুলাই 19, 2017
এখন রেল ডকুমেন্টেশনওsuper এই জাতীয় ব্যবহারের পরামর্শ দিচ্ছে :
class Model < ActiveRecord::Base
def attribute_name=(value)
# custom actions
###
super(value)
end
end
================================================== =========================
আসল উত্তর
আপনি যদি মডেলগুলির মাধ্যমে অ্যাক্সেস করার সময় কোনও সারণীর কলামগুলির জন্য সেটার পদ্ধতিগুলি ওভাররাইড করতে চান তবে এটি করার উপায়।
class Model < ActiveRecord::Base
attr_accessible :attribute_name
def attribute_name=(value)
# custom actions
###
write_attribute(:attribute_name, value)
# this is same as self[:attribute_name] = value
end
end
রেল ডকুমেন্টেশনে ওভাররাইডিং ডিফল্ট অ্যাক্সেসরগুলি দেখুন ।
সুতরাং, আপনার প্রথম পদ্ধতিটি হল রেলের অন মডেলের মডেলগুলিতে কলাম সেটটারগুলিকে ওভাররাইড করার সঠিক উপায়। মডেলটির বৈশিষ্ট্য হিসাবে টেবিলের কলামগুলিতে অ্যাক্সেস পেতে এই অ্যাক্সেসরগুলি ইতিমধ্যে রেল সরবরাহ করেছে। এটিকে আমরা অ্যাক্টিভেকর্ড ওআরএম ম্যাপিং বলি।
এছাড়াও মনে রাখবেন যে attr_accessibleমডেলের শীর্ষে অ্যাক্সেসরগুলির সাথে কোনও সম্পর্ক নেই। এটির সম্পূর্ণ ভিন্ন কার্যকারিতা রয়েছে ( এই প্রশ্নটি দেখুন )
তবে খাঁটি রুবিতে, আপনি যদি কোনও ক্লাসের জন্য অ্যাক্সেসরগুলি সংজ্ঞায়িত করেছেন এবং সেটারটিকে ওভাররাইড করতে চান, আপনাকে উদাহরণস্বরূপ ভেরিয়েবলটি এই জাতীয়ভাবে ব্যবহার করতে হবে:
class Person
attr_accessor :name
end
class NewPerson < Person
def name=(value)
# do something
@name = value
end
end
আপনি কী attr_accessorকরেন তা একবার বুঝতে পারলে এটি আরও সহজ হবে । কোডটি attr_accessor :nameএই দুটি পদ্ধতির সমান (গেটর এবং সেটার)
def name # getter
@name
end
def name=(value) # setter
@name = value
end
এছাড়াও আপনার দ্বিতীয় পদ্ধতিটি ব্যর্থ হয়েছে কারণ আপনি সেই পদ্ধতির attribute_name=অভ্যন্তরে একই পদ্ধতিটি কল করার কারণে এটি একটি অসীম লুপ তৈরি করবে ।