উত্তর:
এটি ম্যানুয়ালি করুন:
add_column :post, :author_id, :integer
তবে এখন, আপনি যখন স্বনিযুক্ত-সংক্রান্ত বিবৃতিটি তৈরি করবেন তখন আপনাকে এটি সংশোধন করতে হবে, সুতরাং এখন আপনাকে কল করতে হবে
def post
belongs_to :user, :foreign_key => 'author_id'
end
schema_plus
রত্ন ব্যবহার করে , t.references :category, index: true, foreign_key: true, references: :match_categories
মাইগ্রেশন ফাইলেও আমার জন্য কাজ করেছিল।
আপনি আপনার সংজ্ঞায়িত হয় Post
মডেল টেবিল, আপনি সেট করতে পারেন references
, index
এবং foreign_key
এক লাইন মধ্যে:
t.references :author, index: true, foreign_key: { to_table: :users }
আপনি যদি কোনও বিদ্যমান সারণীতে রেফারেন্স যুক্ত করে থাকেন তবে আপনি এটি করতে পারেন:
add_reference :posts, :author, foreign_key: { to_table: :users }
দ্রষ্টব্য: এর জন্য ডিফল্ট মানটি index
সত্য।
null
এস। তাদের অনুমতি না দেওয়ার জন্য, সাধারণ বিকল্পটি যুক্ত করুন null: false
।
ইন পাগল 4.2+ আপনার কাছে সেট করতে পারেন বিদেশী কী ডিবি হিসেবে ভাল, যা একটি মহান ধারণা ।
সাধারণ সংঘের জন্য এটি t.references
যুক্ত করার foreign_key: true
ক্ষেত্রেও করা যেতে পারে তবে এই ক্ষেত্রে আপনার দুটি লাইন প্রয়োজন।
# The migration
add_reference :posts, :author, index: true
add_foreign_key :posts, :users, column: :author_id
# The model
belongs_to :author, class_name: "User"
references: :users
বিকল্পটি প্রয়োজন add_reference
। আমি এটি ডক্সে নথিভুক্ত দেখতে পাচ্ছি না এবং মনে হচ্ছে এটি ছাড়া এটি আমার শেষের দিকে কাজ করে।
4 রেলগুলিতে , পোস্টগ্র্যাস্কল এবং স্কিমা_প্লাস রত্ন ব্যবহার করার সময় আপনি কেবল লিখতে পারেন
add_reference :posts, :author, references: :users
এটি একটি কলাম তৈরি করবে author_id
, যা সঠিকভাবে উল্লেখ করে users(id)
।
এবং আপনার মডেল, আপনি লিখুন
belongs_to :author, class_name: "User"
দ্রষ্টব্য, একটি নতুন টেবিল তৈরি করার সময় আপনি এটি নীচে লিখতে পারেন:
create_table :things do |t|
t.belongs_to :author, references: :users
end
দ্রষ্টব্য:
schema_plus
সম্পূর্ণরূপে রত্নটি রেল 5+ এর সাথে সামঞ্জস্যপূর্ণ নয়, তবে এই কার্যকারিতাটি রত্ন স্কিমা_আউটো_ফরাইন_কিজ ( স্কিমা_প্লাসের অংশ) দ্বারা সরবরাহ করা হয় যা রেল 5 এর সাথে সামঞ্জস্যপূর্ণ।
create_table
:t.references :author, references: :users
:references
আসলে কিছুই করার মতো কোনও প্রমাণ আমি পাই না ।
schema_plus
যুগে যুগে রত্নটি ব্যবহার করে আসছি এবং এটি আসলে সেই কার্যকারিতা যুক্ত করছে। আমি আমার উত্তর অনুসারে সম্পাদনা করেছি।
t.references :col_name, references: other_table_name
অতিরিক্ত রত্ন ইনস্টল না করে কাজ করে।
আপনি যদি কোনও বিদেশী কী ব্যবহার না করে থাকেন তবে অন্য টেবিলের আসল সারণির নাম কী তা বিবেচনাধীন নয়।
add_reference :posts, :author
রেল 5 হিসাবে, আপনি যদি কোনও বিদেশী কী ব্যবহার করেন তবে আপনি বিদেশী কী বিকল্পগুলির মধ্যে অন্য সারণির নাম উল্লেখ করতে পারেন। ( আলোচনার জন্য https://github.com/rails/rails/issues/21563 দেখুন )
add_reference :posts, :author, foreign_key: {to_table: :users}
রেল 5 এর আগে, আপনার আলাদা পদক্ষেপ হিসাবে বিদেশী কী যুক্ত করা উচিত:
add_foreign_key :posts, :users, column: :author_id
{to_table: :users}
ওরফে_ট্রিবিউট (নতুন নাম, পুরাতন নাম) খুব সহজ। কেবল আপনার মডেল এবং সম্পর্ক তৈরি করুন:
rails g model Post title user:references
তারপরে মডেলটি সম্পাদনা করুন এবং এর সাথে একটি অ্যাট্রিবিউট ওরফে যুক্ত করুন
alias_attribute :author, :user
এর পরে আপনি এই জাতীয় জিনিস চালাতে সক্ষম হবেন
Post.new(title: 'My beautiful story', author: User.first)