আপনি কীভাবে একটি অ্যাক্টিভেকর্ড অবজেক্ট মুছবেন?


328

আপনি কীভাবে একটি অ্যাক্টিভেকর্ড অবজেক্ট মুছবেন?

আমি অ্যাক্টিভ রেকর্ড ক্যোয়ারিংয়ের দিকে চেয়েছিলাম এবং এটি দেখতে মুছতে মুছতে এর কিছুই নেই anything

  1. এর দ্বারা মুছুন id,

  2. বর্তমান বস্তুর মত মুছুন: user.remove,

  3. আপনি কি একটি whereধারা উপর ভিত্তি করে মুছতে পারেন ?

উত্তর:


572

এটি destroyএবং destroy_allপদ্ধতি, মত

user.destroy
User.find(15).destroy
User.destroy(15)
User.where(age: 20).destroy_all
User.destroy_all(age: 20)

বিকল্পভাবে আপনি ব্যবহার করতে পারেন deleteএবং delete_allযা কার্যকর করবে না :before_destroyএবং :after_destroyকলব্যাকস বা কোনও নির্ভরশীল সমিতি বিকল্পগুলি।

User.delete_all(condition: 'value') আপনাকে প্রাথমিক কী ছাড়াই রেকর্ডগুলি মুছতে দেয়

দ্রষ্টব্য : @ হামাদির মন্তব্য থেকে, user.destroyব্যবহারকারীর মডেলটিতে প্রাথমিক কী না থাকলে কাজ করবে না।

দ্রষ্টব্য 2 : @ প্যাভেল-চুচুবার মন্তব্য থেকে, destroy_allশর্তাদি সহ এবং delete_allশর্তাদি কারাগারে 5.1 এ অবমূল্যায়ন করা হয়েছে - গাইডগুলি দেখুন।


4
আপনি নিজের উত্তরে @ হামাদির মন্তব্য অন্তর্ভুক্ত করতে পারলে ভাল লাগবে। আমি কেন আমার মডেল অবজেক্টটি ধ্বংস করতে পারি না তা
জানার


কেন এটি কেবল আমার ডাটাবেসে মুছে ফেলা_মাম কলামের ডেটা আপডেট করে? আমি কীভাবে ডেটার পুরো সারিটি মুছতে পারি?
টমমিকিউ

1
শর্তাবলী সহ সর্বনাশ_সামগ্রী এবং মুছে ফেলা সবগুলি 5.1 রেলগুলিতে অবহিত করা হয়েছে
পাভেল চুচুভা

এই User.find_by(username:"bob") , ধ্বংস বা মুছে দিতে খুব রেকর্ড চিহ্নিত ভাল।
বার্লপ

60

নেই delete, delete_all, destroy, এবং destroy_all

দস্তাবেজগুলি হ'ল : পুরানো ডক্স এবং রেলগুলি 3.0.0 ডক্স

deleteযখন বস্তুগুলি তাত্ক্ষণিক করে না destroy। সাধারণত, deleteতুলনায় দ্রুত destroy


4
deleteদ্রুততর তবে আপনি মডেলটিতে সংজ্ঞায়িত কলব্যাকগুলিকে বাইপাস করছেন
রদি

48
  1. User.destroy

User.destroy(1)ব্যবহারকারীর মুছে ফেলবে id == 1এবং :before_destroyএবং :after_destroycallbacks ঘটবে। উদাহরণস্বরূপ যদি আপনি রেকর্ড যুক্ত করে থাকেন

has_many :addresses, :dependent => :destroy

ব্যবহারকারী ধ্বংস হওয়ার পরে তার ঠিকানাগুলিও নষ্ট হয়ে যাবে। আপনি যদি পরিবর্তে মুছে ফেলা অ্যাকশন ব্যবহার করেন, কলব্যাকগুলি ঘটবে না।

  1. User.destroy, User.delete

  2. User.destroy_all(<conditions>) অথবা User.delete_all(<conditions>)

বিজ্ঞপ্তি : ব্যবহারকারী একটি শ্রেণি এবং ব্যবহারকারী একটি উদাহরণ বস্তু


3
সম্পর্কিত রেকর্ড সম্বোধন করার জন্য ধন্যবাদ।
সেজে মিচেল

2
সতর্কতা: User.destroy_all()কলব্যাকগুলি চালায়, সুতরাং এটি কোনও কিছু মোছার আগে এটি রেকর্ড লোড করে। এটি দুটি নয় এসকিউএল স্টেটমেন্ট। পারফরম্যান্সের প্রভাবগুলি বাদ দিয়েও এর একত্রে সামঞ্জস্যতা রয়েছে। নিরাপদ কল কলব্যাকগুলি এড়িয়ে যায়; User.delete_all()শুধু একটি DELETE FROM...কমান্ড জারি করবে ।
অ্যান্ড্রু হজকিনসন

1
অবস্থার সঙ্গে destroy_all পাগল 5.1 উঠিয়ে হয়েছে - দেখুন guides.rubyonrails.org/5_1_release_notes.html
পাভেল Chuchuva
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.