কীভাবে রেলগুলিতে একটি গুনের মূল মান পাবেন


96

অ্যাক্টিভেকর্ড অ্যাট্রিবিউট (= এটি ডাটাবেস থেকে লোড হওয়া মানটি) আসল মান পাওয়ার কোনও উপায় আছে কি?

আমি একজন পর্যবেক্ষকের কাছে এরকম কিছু চাই

before_save object
  do_something_with object.original_name
end

কাজটি হ্যাশ টেবিল থেকে বস্তুটি সরিয়ে ফেলা (আসলে, এটি টেবিলের অন্য কীতে সরিয়ে নেওয়া) আপডেট করার পরে।

উত্তর:


243

রেল আগে 5.1

সংযোজন _wasআপনার অ্যাট্রিবিউট আপনার পূর্ববর্তী মান দেব।

রেল 5.1+ এর জন্য

নীচে লুকাস অ্যান্ড্রেডের উত্তর থেকে অনুলিপি করা হয়েছে : https://stackoverflow.com/a/50973808/9359123


_was5.1 রেলগুলিতে সংযোজন হ্রাস করা হয়েছে, এখন আপনার সংযোজন করা উচিত_before_last_save

কিছুটা এইরকম:

before_save object
  do_something_with object.name_before_last_save
end

ডাটাবেসে আপনার শেষ সংরক্ষণের আগে নাম মানটি ফিরিয়ে দেবে (সংরক্ষণ এবং তৈরির জন্য কাজ করে) ডকুমেন্টেশনের


মধ্যে _wasএবং এর মধ্যে পার্থক্য _before_last_save:

ডক্স থেকে উত্স _

def attribute_was(attr)
  attribute_changed?(attr) ? changed_attributes[attr] : __send__(attr)
end

দস্তাবেজ থেকে __ পূর্ববর্তী_স্তুতের উত্স

def attribute_before_last_save(attr_name)
  mutations_before_last_save.original_value(attr_name)
end

7
উদাহরণ: জন্য self.context:self.context_was
Freedom_Ben

4
এর জন্য ডকুমেন্টেশন কোথায়?
j


ডকুমেন্টেশনে, এর জন্য কোনও "অবচয়" সতর্কতা নেই _was
রায়েল গুগেলিন চুনহা

11

রেল 5.1+ এর জন্য

_was5.1 রেলগুলিতে সংযোজন হ্রাস করা হয়েছে, এখন আপনার সংযোজন করা উচিত_before_last_save

কিছুটা এইরকম:

before_save object
  do_something_with object.name_before_last_save
end

ডাটাবেসে আপনার শেষ সংরক্ষণের আগে নাম মানটি ফিরিয়ে দেবে (সংরক্ষণ এবং তৈরির জন্য কাজ করে) ডকুমেন্টেশনের


মধ্যে _wasএবং এর মধ্যে পার্থক্য _before_last_save:

ডক্স থেকে উত্স _

def attribute_was(attr)
  attribute_changed?(attr) ? changed_attributes[attr] : __send__(attr)
end

দস্তাবেজ থেকে __ পূর্ববর্তী_স্তুতের উত্স

def attribute_before_last_save(attr_name)
  mutations_before_last_save.original_value(attr_name)
end

আপনি এখানে একটি ভাল উদাহরণ দেখতে পারেন


4
attribute_wasএর পক্ষে অবমূল্যায়ন করা হয়েছে attribute_in_database, যদিও attribute_before_last_save5.1 হিসাবে সম্পূর্ণ নতুন পদ্ধতি যা রেলের পূর্ববর্তী সংস্করণগুলির সমান নয়। সূত্র: github.com/rails/rails/pull/25337#issuecomment-225166796
ওহালেক

8

অ্যাক্টিভেকর্ডের attributes_before_type_castপদ্ধতিতে টাইপকাস্টিং এবং ডিসিরিয়ালাইজেশন হওয়ার আগে বৈশিষ্ট্যের একটি হ্যাশ ফিরে আসে।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.