রুবেলে রেল। আমি কীভাবে একটিভ রেকর্ড। বিল্ড পদ্ধতিটি ব্যবহার করব: সম্পর্কের সাথে সম্পর্কিত?


128

আমি কারাগারে বিল্ড পদ্ধতিতে কোনও ডকুমেন্টেশন খুঁজে পেতে অক্ষম (বর্তমানে আমি ২.০.২ ব্যবহার করছি)।

পরীক্ষার মাধ্যমে মনে হয় আপনি has_manyকোনও রেকর্ড সংরক্ষণের আগে কোনও সম্পর্কের মধ্যে একটি রেকর্ড যুক্ত করতে বিল্ড পদ্ধতিটি ব্যবহার করতে পারেন ।

উদাহরণ স্বরূপ:

class Dog < ActiveRecord::Base
  has_many :tags
  belongs_to :person
end

class Person < ActiveRecord::Base
  has_many :dogs
end

# rails c
d = Dog.new
d.tags.build(:number => "123456")
d.save # => true

এটি কুকুরটিকে সংরক্ষণ করবে এবং বিদেশী কীগুলির সাথে সঠিকভাবে ট্যাগ করবে। এটি কোনও belongs_toসম্পর্কের ক্ষেত্রে কাজ করে বলে মনে হয় না ।

d = Dog.new
d.person.build # => nil object on nil.build

আমি চেষ্টাও করেছি

d = Dog.new
d.person = Person.new
d.save # => true

বিদেশী কীটি Dogএই ক্ষেত্রে সেট করা হয়নি কারণ এই সময়টি সংরক্ষণ করা হয়েছিল, নতুন ব্যক্তির একটি আইডি নেই কারণ এটি এখনও সংরক্ষণ করা হয়নি।

আমার প্রশ্নগুলি হ'ল:

  1. রেলগুলি কীভাবে সঠিক ক্রমে রেকর্ডগুলি সংরক্ষণ করতে পারে তা নির্ধারণের জন্য পর্যাপ্ত স্মার্ট যাতে তৈরি কীভাবে কাজ করে?

  2. আমি সম্পর্কের ক্ষেত্রে কীভাবে একই কাজ করতে পারি belongs_to?

  3. এই পদ্ধতিতে আমি কোথায় কোনও ডকুমেন্টেশন পেতে পারি?

ধন্যবাদ


ডকুমেন্টেশন সম্পর্কিত, রেল গাইড "দ্বারা যুক্ত পদ্ধতি belongs_to" এবং " has_oneদ্বারা যুক্ত পদ্ধতি " দেখুন । আরও প্রযুক্তিগত ডকুমেন্টেশন এপিআই ডক্সে পাওয়া যাবে: belongs_toএবং has_one
ডেনিস

উত্তর:


147

যেখানে এটি নথিভুক্ত করা হয়েছে:

" মডিউল অ্যাক্টিভেকর্ড :: এসোসিয়েশনস :: ক্লাসমেথডস " এ has_many সংস্থার অধীনে এপিআই ডকুমেন্টেশন থেকে

সংগ্রহ.বিল্ড (বৈশিষ্ট্য = {},…) সংগ্রহের ধরণের এক বা একাধিক নতুন অবজেক্ট ফিরিয়ে দেয় যা বৈশিষ্ট্যগুলি দিয়ে ইনস্ট্যান্ট করা হয়েছে এবং একটি বিদেশী কী এর মাধ্যমে এই বস্তুর সাথে সংযুক্ত করা হয়েছে, তবে এখনও সংরক্ষণ করা যায় নি। দ্রষ্টব্য: এটি কেবল তখনই কাজ করে যদি কোনও সম্পর্কিত বস্তু ইতিমধ্যে উপস্থিত থাকে, এটি শূন্য না হলে!

বিপরীত দিকে বিল্ডিংয়ের উত্তরটি সামান্য পরিবর্তিত সিনট্যাক্স। কুকুরের সাথে আপনার উদাহরণে,

Class Dog
   has_many :tags
   belongs_to :person
end

Class Person
  has_many :dogs
end

d = Dog.new
d.build_person(:attributes => "go", :here => "like normal")

অথবা এমনকি

t = Tag.new
t.build_dog(:name => "Rover", :breed => "Maltese")

এটি তাত্ক্ষণিকভাবে সংরক্ষণ করতে আপনি ক্রিয়ে_ডগ ব্যবহার করতে পারেন (অনেকগুলি অনুরূপ "তৈরি" পদ্ধতির মতো আপনি সংগ্রহটিতে কল করতে পারেন)

রেল কীভাবে যথেষ্ট স্মার্ট? এটি যাদু (বা আরও সঠিকভাবে, আমি কেবল জানি না, এটি খুঁজে পেতে পছন্দ করবে!)


4
@ বুশিমার্ক: এটি সংজ্ঞায়িত_মথাদির সাথে এই পদ্ধতিগুলি যুক্ত করতে মেথড_মিসিং বা রূপকর্ম ব্যবহার করে।
ফেডেরিকো

@ ফেডেরিকো কোথায় অনুপস্থিত পদ্ধতিটি সংজ্ঞায়িত হয়েছে?
জাগ্রত

1
@ alock27 কীভাবে অ্যাক্টিভেকর্ড আপনার find_by_emailএবং find_by_column_nameপদ্ধতিগুলির জন্য অনুপস্থিত পদ্ধতি ব্যবহার করে তা একই । এটি আপনি যে স্ট্রিংয়ে পাঠিয়েছেন তা রূপান্তর করে এবং এটিকে বিচ্ছিন্ন করে এবং আপনার টেবিলের কলামের নামগুলির সাথে এটি মিলানোর চেষ্টা করে।
বিগপোটাতো

@ এডমন্ড আপনার মন্তব্যের জন্য ধন্যবাদ। পরিষ্কার হয়ে উঠতে, আমি বুঝি কীভাবে পদ্ধতি_মিশ্রিং কাজ করে। আমি ফাইলটির আসল অবস্থানটি সনাক্ত করার চেষ্টা করছিলাম যা এই নির্দিষ্ট পদ্ধতিটি অনুপস্থিত চিহ্নিত করে।
জাগ্রত

@ অ্যালোক 27 আপনি যদি জিজ্ঞাসা করছেন কারণ আপনি এটি কীভাবে সংজ্ঞায়িত করেছেন তা আপনি দেখতে চান রুটিকে কীভাবে মেটাপ্রোগ্রামিং করা উচিত। তবে আপনি যদি সত্যই অবস্থানটির সন্ধান করছেন তবে উত্স কোডের জন্য আপনি সম্ভবত গুগল করতে পারেন।
এমসিবির

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.