উত্তর:
রেলের পুরানো সংস্করণগুলির সংক্ষিপ্ত উত্তর (রেল 4+ এর জন্য অন্যান্য উত্তর দেখুন):
add_index :table_name, :column_name, unique: true
একাধিক কলাম একসাথে সূচি করতে, আপনি একক কলামের নামের পরিবর্তে কলামের নামের একটি অ্যারে পাস করেন,
add_index :table_name, [:column_name_a, :column_name_b], unique: true
আপনি যদি "সূচকের নাম ... খুব দীর্ঘ" name: "whatever"
পেয়ে থাকেন তবে নামটি সংক্ষিপ্ত করে তুলতে আপনি add_index পদ্ধতিতে যুক্ত করতে পারেন।
জরিমানাযুক্ত নিয়ন্ত্রণের জন্য, " execute
" একটি পদ্ধতি আছে যা সরাসরি এসকিউএল চালায়।
এটাই!
আপনি যদি নিয়মিত পুরানো মডেল বৈধতার জন্য প্রতিস্থাপন হিসাবে এটি করছেন, এটি কীভাবে কাজ করে তা পরীক্ষা করে দেখুন। ব্যবহারকারীর কাছে ত্রুটি জানানো সম্ভবত মডেল-স্তরের বৈধতা ছাড়াই দুর্দান্ত হবে না। আপনি সর্বদা উভয় করতে পারেন।
indexed columns are not unique
কোনও অনন্য সূচক তৈরি করার চেষ্টা করার সময় আপনি যদি ত্রুটি পান তবে এটি হতে পারে কারণ টেবিলের ডেটাতে ইতিমধ্যে নকল রয়েছে। সদৃশ ডেটা সরিয়ে আবার মাইগ্রেশন চালানোর চেষ্টা করুন।
, :name => "whatever"
করার add_index
পদ্ধতিতে আপনি যুক্ত করতে পারেন।
রেলগুলি মাইগ্রেশন যুক্ত করে_ইনডেক্স_ থেকে_ টেবিল_নাম কলাম_নাম: ইউনিক
অথবা
রেলগুলি মাইগ্রেশন সংযোজন_সারণক_নাম_ত_ টেবিল_নাম কলাম_নাম: স্ট্রিং: ইউনিক: সূচক
উত্পন্ন
class AddIndexToModerators < ActiveRecord::Migration
def change
add_column :moderators, :username, :string
add_index :moderators, :username, unique: true
end
end
আপনি যদি বিদ্যমান কলামে একটি সূচক যুক্ত করে থাকেন তবে add_column
লাইনটি সরিয়ে ফেলুন বা মন্তব্য করুন বা একটি পরীক্ষা করুন
add_column :moderators, :username, :string unless column_exists? :moderators, :username
add_index...
এবং না করি add_column...
।
যেহেতু এই এখনো উল্লেখ করা হয় নি কিন্তু প্রশ্ন ছিল আমি যখন আমি এই পৃষ্ঠা খুঁজে পাওয়া উত্তর, এছাড়াও আপনি নির্দিষ্ট করতে পারেন যে একটি সূচক অনন্য যখন মাধ্যমে এটি যোগ হওয়া উচিত t.references
বা t.belongs_to
:
create_table :accounts do |t|
t.references :user, index: { unique: true } # or t.belongs_to
# other columns...
end
(কমপক্ষে রেল হিসাবে 4.2.7
)
আমি রেল 5 ব্যবহার করছি এবং উপরের উত্তরগুলি দুর্দান্ত কাজ করছে; এখানে অন্য উপায় যা আমার পক্ষেও কাজ করেছিল (টেবিলের নাম :people
এবং কলামের নাম :email_address
)
class AddIndexToEmailAddress < ActiveRecord::Migration[5.0]
def change
change_table :people do |t|
t.index :email_address, unique: true
end
end
end
আপনি অনন্য কীটির জন্য নাম যুক্ত করতে চাইতে পারেন কারণ রেল দ্বারা ডিফল্ট অনন্য_কির নামটি অনেক দীর্ঘ হতে পারে যার জন্য ডিবি ত্রুটিটি ফেলে দিতে পারে।
আপনার সূচকের নাম যুক্ত করতে কেবল name:
বিকল্পটি ব্যবহার করুন । মাইগ্রেশন ক্যোয়ারী এর মতো দেখতে পারে -
add_index :table_name, [:column_name_a, :column_name_b, ... :column_name_n], unique: true, name: 'my_custom_index_name'
আরও তথ্য - http://apidock.com/rails/ActtiveRecord/ConnicationAdapters/SchemaStatements/add_index
আপনি যদি ডিবি কলামে অনন্য যোগ করতে না ভুলে থাকেন তবে ক্ষেত্রটি অনন্য কিনা তা পরীক্ষা করতে মডেলটিতে এই বৈধতাটি যুক্ত করুন:
class Person < ActiveRecord::Base
validates_uniqueness_of :user_name
end
এখানে পড়ুন সর্বোপরি শুধুমাত্র উদ্দেশ্যে পরীক্ষার জন্য, যোগ করুন দয়া করে সূচক পরিবর্তন ডিবি কলাম হিসেবে @Nate দ্বারা প্রস্তাবিত
আরও তথ্যের জন্য অনুগ্রহ করে এটি সূচক সহ উল্লেখ করুন