নিজের_আপনার_এর মধ্যে পার্থক্য কী?


উত্তর:


241

তারা মূলত একই জিনিসটি করে, কেবলমাত্র পার্থক্য হ'ল আপনি যে সম্পর্কের দিকে রয়েছেন। যদি Userএকটির একটি থাকে Profileতবে আপনি যে Userশ্রেণিতে থাকবেন has_one :profileএবং Profileআপনার যে শ্রেণিতে থাকবেন belongs_to :user। অন্য অবজেক্টটির "কারা" আছে তা নির্ধারণ করতে, বিদেশী কীটি রয়েছে তা দেখুন। আমরা বলতে পারি যে একটি User"আছে" একটি Profileকারণ profilesটেবিলে একটি user_idকলাম রয়েছে। টেবিলে যদি কোনও কলাম কল profile_idকরা হত users, তবে আমরা বলব যে এর একটি Profileরয়েছে Userএবং এর সাথে_সামান্য / has_one অবস্থানগুলি অদলবদল করা হবে।

এখানে আরও বিস্তারিত ব্যাখ্যা দেওয়া হল।


ঠিক আছে তা বোঝায়, has_a হল সম্পত্তি, আর একটি সম্পর্কটি আরও বেশি সম্পর্কযুক্ত।
— ব্লেকম্যান

48
সুতরাং এটিকে সত্যিই সংক্ষিপ্ত বলা: এর Product belongs_to Shopঅর্থ productsসারণিতে shop_idকলাম রয়েছে
— Yo Ludke

@ রিয়েগু, যদি এটি স্ব-যোগদানের সম্পর্ক হয় তবে কী হবে?
— আরিয়ান ফুর্তোষ

49

বিদেশী চাবি কোথায় বসে এটি প্রায়।

class Foo < AR:Base
end
  • যদি foo হয় belongs_to :bar, তবে foos টেবিলটিতে একটি bar_idকলাম রয়েছে
  • যদি foo হয় 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)
)

ইতিমধ্যে দু'বছর আগে গৃহীত উত্তরটি এটি প্রায় একই রকম।
— ম্যাথিয়াস ক্রল

11
এটি বেশ ভাল উত্তর।
— টাইপোনায়ারর

এই উদাহরণ Accountএবং ব্যবহারের ব্যবহার Userদুর্ভাগ্যজনক যেহেতু প্রায়শই এমন হয় যে কোনও অ্যাকাউন্টে অনেক ব্যবহারকারী থাকতে পারে।
— কর্মকাজে

5

has_oneএবং belongs_toসাধারণত তারা অন্য সম্পর্কিত মডেল নির্দেশ করে যে অর্থে একই। belongs_toএই মডেলটির foreign_keyসংজ্ঞা রয়েছে কিনা তা নিশ্চিত করুন । has_oneঅন্যান্য মডেল has_foreignকী সংজ্ঞায়িত হয়েছে তা নিশ্চিত করে ।

আরও সুনির্দিষ্টভাবে বলতে relationshipগেলে দুটি দিক রয়েছে , একটি হ'ল Ownerঅন্যটি Belongings। যদি কেবল has_oneসংজ্ঞায়িত করা হয় তবে আমরা এটি পেতে Belongingsপারি তবে এটি Ownerথেকে পেতে পারি না belongings। ট্রেস করার জন্য Ownerআমাদের belongs_toসম্পর্কিত মডেলটিও সংজ্ঞায়িত করতে হবে ।


3

একটি অতিরিক্ত জিনিস যা আমি যুক্ত করতে চাই তা হ'ল ধরুন, আমরা নীচের মডেলগুলি অ্যাসোসিয়েশন করেছি

class Author < ApplicationRecord has_many :books end

যদি আমরা কেবল উপরের সমিতিটি লিখি তবে আমরা কোনও নির্দিষ্ট লেখকের সমস্ত বই পেতে পারি,

@books = @author.books

তবে একটি নির্দিষ্ট বইয়ের জন্য আমরা সংশ্লিষ্ট লেখক দ্বারা পেতে পারি না,

@author = @book.author

উপরের কোডটি কাজের কাজ করতে আমাদের বুক মডেলটির সাথেও এই জাতীয় সংযোগ যুক্ত করতে হবে

class Book < ApplicationRecord
  belongs_to :author
end

এটি বুক মডেলটিতে পদ্ধতি 'লেখক' যুক্ত করবে।
মোডের বিশদগুলির জন্য গাইডগুলি দেখুন


0

সরলতার দৃষ্টিকোণ থেকে, কারণ এর belongs_toচেয়ে ভাল , আপনাকে সম্পর্কটি কার্যকর করার জন্য বিদেশী কী রয়েছে এমন মডেল এবং সারণীতে নিম্নলিখিত সীমাবদ্ধতাগুলি যুক্ত করতে হবে :has_onehas_onehas_one

  • validates :foreign_key, presence: true, uniqueness: true
  • বৈদেশিক কীতে একটি ডাটাবেস অনন্য সূচক যুক্ত করুন।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.