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


142

আমার মডেল শ্রেণীর সমস্ত বৈশিষ্ট্য / বৈশিষ্ট্যগুলি সহজেই আমার শ্রেণীর ফাইলগুলিতে সংজ্ঞায়িত না হওয়ায় সহজেই দেখতে আমার অসুবিধা হচ্ছে।

মডেল বৈশিষ্ট্যগুলি আবিষ্কার করতে, আমি স্কিমা.আরবি ফাইলটি খোলা রাখি এবং এটির মধ্যে এবং আমি যা প্রয়োজন কোড লিখছি তার মধ্যে ফ্লিপ করুন। এটি কাজ করে তবে বিশৃঙ্খল কারণ আমাকে বৈশিষ্ট্য বাছাই করতে স্কিমা ফাইলটি পড়া, পদ্ধতিগুলি পরীক্ষা করার জন্য মডেল বর্গ ফাইল এবং বৈশিষ্ট্য এবং পদ্ধতিগুলি কল করতে আমি যে নতুন কোড লিখছি তা নিয়ে আমার পরিবর্তন করতে হবে।

আমার প্রশ্ন হ'ল, আপনি যখন প্রথমবারের জন্য একটি রেল কোডবেস বিশ্লেষণ করছেন তখন মডেল বৈশিষ্ট্যগুলি কীভাবে আবিষ্কার করবেন? আপনি কি স্কিমা.আরবি ফাইলটি সর্বদা উন্মুক্ত রাখেন, বা এমন কোনও আরও ভাল উপায় আছে যা স্কিমা ফাইল এবং মডেল ফাইলের মধ্যে ক্রমাগত ঝাঁপ দেয় না?


7
নীচের উত্তরের জন্য ধন্যবাদ। দেখে মনে হচ্ছে মডেল উত্স ফাইলে অ্যাট্রিবিউটের নামগুলি ঘোষণা করার মতো ভাল উপায় নেই, তবে একটি টার্মিনাল খোলা রাখুন এবং অবজেক্টগুলি তাদের বৈশিষ্ট্যগুলি সন্ধান করার জন্য খোঁচা রাখুন।
জিবিসি

উত্তর:


276

স্কিমা সম্পর্কিত স্টাফ জন্য

Model.column_names         
Model.columns_hash         
Model.columns 

উদাহরণস্বরূপ একটি এআর বস্তুতে ভেরিয়েবল / বৈশিষ্ট্য

object.attribute_names                    
object.attribute_present?          
object.attributes

উদাহরণস্বরূপ সুপার ক্লাসের উত্তরাধিকার ছাড়াই

Model.instance_methods(false)

10
সমিতিগুলি পেতে আপনি এটি করতে পারেন: Model.reflect_on_all_associations.map (&: নাম)
ভাসিলাকিসফিল

1
অ্যাক্টিভেকর্ড 5 এ (এবং সম্ভবত পূর্ববর্তী) আপনি কল করতে পারেন Model.attribute_names
aceofbassgreg

27

অ্যানোটেট মডেল নামে একটি রেল প্লাগইন রয়েছে, এটি আপনার মডেল ফাইলগুলির শীর্ষে আপনার মডেল বৈশিষ্ট্যগুলি তৈরি করবে লিঙ্কটি:

https://github.com/ctran/annotate_models

টীকাটি সিঙ্কে রাখার জন্য, আপনি প্রতিটি মোতায়েনের পরে এ্যানোটেটের মডেলগুলি পুনরায় উত্পন্ন করার জন্য একটি কাজ লিখতে পারেন।


3
আমি যেটা ধরে নিয়েছি তার জন্য নতুন সাইটটি একই প্লাগইন, github.com/ctran/annotate_models
জেমস ম্যাকমাহন

15

আপনি যদি ডাটাবেস থেকে বৈশিষ্ট্য এবং ডেটা ধরণের বিষয়ে আগ্রহী হন তবে আপনি এটি ব্যবহার করতে পারেন Model.inspect

irb(main):001:0> User.inspect
=> "User(id: integer, email: string, encrypted_password: string,
 reset_password_token: string, reset_password_sent_at: datetime,
 remember_created_at: datetime, sign_in_count: integer,
 current_sign_in_at: datetime, last_sign_in_at: datetime,
 current_sign_in_ip: string, last_sign_in_ip: string, created_at: datetime,
 updated_at: datetime)"

বিকল্পভাবে, চালানো rake db:createএবং rake db:migrateআপনার বিকাশের পরিবেশের জন্য, ফাইলটিতে db/schema.rbআপনার ডাটাবেস কাঠামোর অনুমোদনের উত্স থাকবে:

ActiveRecord::Schema.define(version: 20130712162401) do
  create_table "users", force: true do |t|
    t.string   "email",                  default: "", null: false
    t.string   "encrypted_password",     default: "", null: false
    t.string   "reset_password_token"
    t.datetime "reset_password_sent_at"
    t.datetime "remember_created_at"
    t.integer  "sign_in_count",          default: 0
    t.datetime "current_sign_in_at"
    t.datetime "last_sign_in_at"
    t.string   "current_sign_in_ip"
    t.string   "last_sign_in_ip"
    t.datetime "created_at"
    t.datetime "updated_at"
  end
end

10

মডেলটি বর্ণনা করতে আমি নিম্নলিখিত স্নিপেট ব্যবহার করি

Model.columns.collect { |c| "#{c.name} (#{c.type})" }

আবার এটি হ'ল আপনি যদি ActiveRecordগর্তের স্থানান্তর না করে বা বৈশিষ্ট্য সম্পর্কে মন্তব্য করার পক্ষে যথেষ্ট সুন্দর হওয়ার আগে সেই বিকাশকারীকে আশ্বাস না দিয়ে আপনাকে বর্ণনা করার জন্য সুন্দর মুদ্রণ খুঁজছেন ।


এটি একটি নির্দিষ্ট মডেলের জন্য সমস্ত দৃষ্টান্তের সমস্ত বৈশিষ্ট্য মুদ্রণের জন্য উপযুক্ত - ধন্যবাদ!
ConorB

4
some_instance.attributes

সূত্র: ব্লগ


some_class.attributes.keys একটু ক্লিনার
ক্লাচনার

কোনও আইডিই স্বতঃপূরণ জন্য এটি ব্যবহার করে কি অবাক? রেল মডেলটির জন্য করণীয় একটি সুস্পষ্ট জিনিস বলে মনে হচ্ছে। আমি যখনই কোনও গুনের নাম লিখতে শুরু করি তখন আমি সর্বদা হতাশ হয়ে যাই এবং এটি স্বয়ংক্রিয়ভাবে সম্পূর্ণ হয় না।
ফ্র্যাঙ্কোডওয়ায়ার

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