উত্তর:
তারা মূলত একই জিনিসটি করে, কেবলমাত্র পার্থক্য হ'ল আপনি যে সম্পর্কের দিকে রয়েছেন। যদি 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_one
has_one
has_one
validates :foreign_key, presence: true, uniqueness: true