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


উত্তর:


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.