কোনও মডেলের নির্দিষ্ট কলাম / বৈশিষ্ট্য আছে কিনা তা কীভাবে পরীক্ষা করবেন?


123

আমার একটি পদ্ধতি রয়েছে যার একটি হ্যাশ দিয়ে লুপ করা দরকার এবং প্রতিটি কী একটি মডেলের টেবিলে উপস্থিত রয়েছে কিনা তা পরীক্ষা করে দেখুন, অন্যথায় এটি কী / মানটি মুছে ফেলবে।

উদাহরণ স্বরূপ

number_hash = { :one => "one", :two => "two" }

এবং সংখ্যা সারণীতে কেবল একটি: একটি কলাম রয়েছে: দুটি মোছা হবে।

কোনও মডেলের কোনও বৈশিষ্ট্য আছে কিনা তা আমি কীভাবে পরীক্ষা করব?

উত্তর:


205

একটি ক্লাসের জন্য

আপনার গুণাবলীর স্ট্রিংয়ের নাম Class.column_names.include? attr_nameকোথায় রয়েছে attr_nameতা ব্যবহার করুন ।

এক্ষেত্রে: Number.column_names.include? 'one'

একটি উদাহরণ জন্য

ব্যবহার করুন record.has_attribute?(:attr_name)বা record.has_attribute?('attr_name')(রেল 3.2+) বা record.attributes.has_key? attr_name

এই ক্ষেত্রে: number.has_attribute?(:one)বা number.has_attribute?('one')বাnumber.attributes.has_key? 'one'


বোনাস পয়েন্টের জন্য ব্যবহার করুন Hash#select:number_hash.select { |key, value| Number.column_names.include? key }
hgmnz

28
Ails.২++ রেলগুলিতে, এমন চিহ্ন ব্যবহার করুন number.has_attribute?যা প্রতীক বা একটি স্ট্রিং গ্রহণ করে
মার্ক-আন্ড্রে লাফোর্টুন

আমি বিশ্বাস করি যদি কোনও বস্তু অন্য কোনও বস্তুর কাছে কোনও পদ্ধতি অর্পণ করে, এই পদ্ধতিটি ভুলভাবে কলামটি বিদ্যমান বলে পরামর্শ দেবে। আমি এমন একটিগুলির জন্য আমার মডেলগুলি যাচাই করেছিলাম user, তবে user_idকিছু মডেল ব্যবহারকারীকে অর্পিত হওয়ার কারণে তার পরিবর্তে সন্ধান করতে হয়েছিল।
ম্যাটিবি

Hash#has_key?পক্ষে অবচিতHash#key?
চার্লস Hamel

কীভাবে অ্যাট্রিবিউট_মোথড ব্যবহার করবেন ? শ্রেণীর জন্য:Number.attribute_method? 'one'
ওউরনোস

13

আপনার যদি পাশাপাশি ডাক্তারগুলিরও পরীক্ষা করতে হয় তবে আপনি ব্যবহার করতে পারেন Number.method_defined? attr_nameবা করতে পারেন number.class.method_defined? attr_name

আমাকে এমন একটি মঙ্গয়েড অবজেক্টের জন্য করণীয় ছিল যা ক্ষেত্রের বাইরের ক্ষেত্র ছিল।


আমি ModelName.attribute_method? :attr_nameআমার উদাহরণে যা কাজ করেছি তা পেয়েছিল
জুলাই'১১-

10

আপনার উদাহরণ বস্তুতে, আপনি defined? instance.attributeবা ব্যবহার করতে পারেন instance.respond_to? :attribute
কোনও মডেল বৈশিষ্ট্য বা যেকোন পদ্ধতি পরীক্ষা করার জন্য এগুলি আরও সাধারণ সমাধান।


3
দয়া করে মনে রাখবেন:instance.respond_to?(:attribute) == false ; instance.attribute ; instance.respond_to?(:attribute) == true
kbrock
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.