উত্তর:
তারা মূলত একই জিনিসটি করে, কেবলমাত্র পার্থক্য হ'ল আপনি যে সম্পর্কের দিকে রয়েছেন। যদি Userএকটির একটি থাকে Profileতবে আপনি যে Userশ্রেণিতে থাকবেন has_one :profileএবং Profileআপনার যে শ্রেণিতে থাকবেন belongs_to :user। অন্য অবজেক্টটির "কারা" আছে তা নির্ধারণ করতে, বিদেশী কীটি রয়েছে তা দেখুন। আমরা বলতে পারি যে একটি User"আছে" একটি Profileকারণ profilesটেবিলে একটি user_idকলাম রয়েছে। টেবিলে যদি কোনও কলাম কল profile_idকরা হত users, তবে আমরা বলব যে এর একটি Profileরয়েছে Userএবং এর সাথে_সামান্য / has_one অবস্থানগুলি অদলবদল করা হবে।
এখানে আরও বিস্তারিত ব্যাখ্যা দেওয়া হল।
Product belongs_to Shopঅর্থ productsসারণিতে shop_idকলাম রয়েছে
বিদেশী চাবি কোথায় বসে এটি প্রায়।
class Foo < AR:Base
end
belongs_to :bar, তবে foos টেবিলটিতে একটি bar_idকলাম রয়েছেhas_one :bar, তবে বারের টেবিলটিতে একটি foo_idকলাম রয়েছেধারণাগত পর্যায়ে, যদি আপনার class Aএকটি আছে has_oneসঙ্গে সম্পর্ক class Bতারপর class Aঅভিভাবক হয় class Bঅত: পর আপনার class Bএকটি থাকবে belongs_toসঙ্গে সম্পর্ক class Aথেকে আজ তা সন্তান class A।
উভয়ই 1-1 সম্পর্ক প্রকাশ করে। পার্থক্যটি বেশিরভাগ ক্ষেত্রে বিদেশী কীটি রাখা যায়, যা belongs_toসম্পর্কের বিষয়টি ক্লাসের টেবিলে যায় ।
class User < ActiveRecord::Base
# I reference an account.
belongs_to :account
end
class Account < ActiveRecord::Base
# One user references me.
has_one :user
end
এই ক্লাসগুলির টেবিলগুলি এমন কিছু দেখতে পারে:
CREATE TABLE users (
id int(11) NOT NULL auto_increment,
account_id int(11) default NULL,
name varchar default NULL,
PRIMARY KEY (id)
)
CREATE TABLE accounts (
id int(11) NOT NULL auto_increment,
name varchar default NULL,
PRIMARY KEY (id)
)
Accountএবং ব্যবহারের ব্যবহার Userদুর্ভাগ্যজনক যেহেতু প্রায়শই এমন হয় যে কোনও অ্যাকাউন্টে অনেক ব্যবহারকারী থাকতে পারে।
has_oneএবং belongs_toসাধারণত তারা অন্য সম্পর্কিত মডেল নির্দেশ করে যে অর্থে একই। belongs_toএই মডেলটির foreign_keyসংজ্ঞা রয়েছে কিনা তা নিশ্চিত করুন ।
has_oneঅন্যান্য মডেল has_foreignকী সংজ্ঞায়িত হয়েছে তা নিশ্চিত করে ।
আরও সুনির্দিষ্টভাবে বলতে relationshipগেলে দুটি দিক রয়েছে , একটি হ'ল Ownerঅন্যটি Belongings। যদি কেবল has_oneসংজ্ঞায়িত করা হয় তবে আমরা এটি পেতে Belongingsপারি তবে এটি Ownerথেকে পেতে পারি না belongings। ট্রেস করার জন্য Ownerআমাদের belongs_toসম্পর্কিত মডেলটিও সংজ্ঞায়িত করতে হবে ।
একটি অতিরিক্ত জিনিস যা আমি যুক্ত করতে চাই তা হ'ল ধরুন, আমরা নীচের মডেলগুলি অ্যাসোসিয়েশন করেছি
class Author < ApplicationRecord
has_many :books
end
যদি আমরা কেবল উপরের সমিতিটি লিখি তবে আমরা কোনও নির্দিষ্ট লেখকের সমস্ত বই পেতে পারি,
@books = @author.books
তবে একটি নির্দিষ্ট বইয়ের জন্য আমরা সংশ্লিষ্ট লেখক দ্বারা পেতে পারি না,
@author = @book.author
উপরের কোডটি কাজের কাজ করতে আমাদের বুক মডেলটির সাথেও এই জাতীয় সংযোগ যুক্ত করতে হবে
class Book < ApplicationRecord
belongs_to :author
end
এটি বুক মডেলটিতে পদ্ধতি 'লেখক' যুক্ত করবে।
মোডের বিশদগুলির জন্য গাইডগুলি দেখুন
সরলতার দৃষ্টিকোণ থেকে, কারণ এর belongs_toচেয়ে ভাল , আপনাকে সম্পর্কটি কার্যকর করার জন্য বিদেশী কী রয়েছে এমন মডেল এবং সারণীতে নিম্নলিখিত সীমাবদ্ধতাগুলি যুক্ত করতে হবে :has_onehas_onehas_one
validates :foreign_key, presence: true, uniqueness: true