কোনও অ্যাক্টিভেকর্ড মডেলটিতে সঞ্চয় না করে মানের ভর করার জন্য, হয় assign_attributesবা attributes=পদ্ধতিগুলি ব্যবহার করুন। এই পদ্ধতিগুলি 3 টি নতুন এবং আরও নতুন উপলব্ধ। তবে সচেতন হওয়ার জন্য সামান্য পার্থক্য এবং সংস্করণ-সম্পর্কিত গোট্যাচ রয়েছে।
উভয় পদ্ধতিই এই ব্যবহারটি অনুসরণ করে:
@user.assign_attributes{ model: "Sierra", year: "2012", looks: "Sexy" }
@user.attributes = { model: "Sierra", year: "2012", looks: "Sexy" }
নোট করুন যে কোনও পদ্ধতিই বৈধতা সম্পাদন করবে না বা কলব্যাকগুলি কার্যকর করবে না; কলব্যাক এবং বৈধতা কখন ঘটবেsave বলা ।
রেল 3
attributes=R. কারাগারের তুলনায় কিছুটা আলাদা assign_attributes3 attributes=. assign_attributesএ জাতীয় কোনও হ্যাশ চেক নেই। এর জন্য অ্যাক্টিভেকর্ড অ্যাট্রিবিউট অ্যাসাইনমেন্ট এপিআই ডকুমেন্টেশনattributes= দেখুন ।
নিম্নলিখিত অবৈধ কোডটি অ্যাট্রিবিউট সেট না করে কেবল ফিরে এসে চুপচাপ ব্যর্থ হবে:
@user.attributes = [ { model: "Sierra" }, { year: "2012" }, { looks: "Sexy" } ]
attributes= নিঃশব্দে এমন আচরণ করবে যেন অ্যাসাইনমেন্টগুলি সফলভাবে করা হয়েছিল, যখন সত্যই ছিল না।
assign_attributesঘেরযুক্ত অ্যারের হ্যাশ কীগুলিকে আরও শক্তিশালী করার চেষ্টা করার সময় এই অবৈধ কোডটি একটি ব্যতিক্রম বাড়িয়ে তুলবে:
@user.assign_attributes([ { model: "Sierra" }, { year: "2012" }, { looks: "Sexy" } ])
assign_attributesএর NoMethodErrorজন্য ব্যতিক্রম উত্থাপন করবে stringify_keys, ইঙ্গিত করে যে প্রথম যুক্তি হ্যাশ নয়। ব্যতিক্রম নিজেই প্রকৃত কারণ সম্পর্কে খুব তথ্যপূর্ণ নয়, কিন্তু এটা সত্য যে একটি ব্যতিক্রম ঘটবে না হয় খুব গুরুত্বপূর্ণ।
এই ক্ষেত্রেগুলির মধ্যে কেবলমাত্র পার্থক্য হ'ল ভর অ্যাসাইনমেন্টের জন্য ব্যবহৃত পদ্ধতি: attributes=নিঃশব্দে সফল হয় এবং assign_attributesকোনও ত্রুটি ঘটেছে তা জানাতে একটি ব্যতিক্রম উত্থাপন করে।
এই উদাহরণগুলি সংবিধিবদ্ধ বলে মনে হতে পারে, এবং সেগুলি একটি ডিগ্রীতে রয়েছে, তবে এপিআই থেকে ডেটা রূপান্তর করার সময়, বা এমনকি কেবলমাত্র একটি সিরিজের ডেটা ট্রান্সফর্মেশন ব্যবহার করে এবং Hash[]ফাইনালের ফলাফলগুলিতে ভুলে গিয়ে এই ধরণের ত্রুটি সহজেই দেখা দিতে পারে .map। উপরে কিছু কোড 50 রেখাগুলি বজায় রাখুন এবং আপনার অ্যাট্রিবিউট অ্যাসাইনমেন্ট থেকে 3 টি ফাংশন সরানো হয়েছে এবং আপনি ব্যর্থতার একটি রেসিপি পেয়েছেন।
রেল 3 সহ পাঠটি হ'ল: সর্বদাassign_attributes পরিবর্তে ব্যবহার করুনattributes= ।
রেল 4
4 রেলগুলিতে, attributes=কেবলমাত্র একটি উপাধি assign_attributes। এর জন্য অ্যাক্টিভেকর্ড অ্যাট্রিবিউট অ্যাসাইনমেন্ট এপিআই ডকুমেন্টেশনattributes= দেখুন ।
রেলস 4 এর সাথে, যে কোনও পদ্ধতিই আন্তঃআযোগযোগ্যভাবে ব্যবহার করা যেতে পারে। প্রথম যুক্তি হিসাবে একটি হ্যাশ পাস করতে ব্যর্থতার ফলে খুব সহায়ক ব্যতিক্রম হবে:ArgumentError: When assigning attributes, you must pass a hash as an argument.
যাচাই
আপনি যদি ক প্রস্তুতিতে প্রাক-উড়ানের কার্যাদি করেন তবে আপনি saveসংরক্ষণের আগে বৈধতা দেওয়ার আগ্রহীও হতে পারেন। আপনি এটির জন্য valid?এবং invalid?পদ্ধতিগুলি ব্যবহার করতে পারেন । উভয়ই বুলিয়ান মান দেয়। valid?যদি সংরক্ষণ না করা মডেল সমস্ত বৈধতা পাস করে বা এটি না করে তবে সত্যটি প্রত্যাশা করে। invalid?সহজভাবে এর বিপরীতvalid?
valid? এটি ব্যবহার করা যেতে পারে:
@user.assign_attributes{ model: "Sierra", year: "2012", looks: "Sexy" }.valid?
এটি আপনাকে কল করার আগেই কোনও বৈধতা সংক্রান্ত সমস্যাগুলি পরিচালনা করার ক্ষমতা দেয় save।