Ails params.require (: person) .permit (: নাম,: বয়স) R 4 রেলগুলিতে কি করছেন?


149

4 টি ডক্স ব্যবহারের জন্য শক্তিশালী পরামিতির সমস্ত উদাহরণ

params.require(:person).permit(:name, :age)

কেউ দয়া করে ডিকনস্ট্রাক্ট করে ব্যাখ্যা করতে পারেন যে এখানে requireএবং permitএখানে কী ঘটছে ?


3
এই উদাহরণটি সরাসরি ডকুমেন্টেশন থেকে আসে, যা ব্যাখ্যা করে permitতবে তা নয় require
এরিক ট্রুটম্যান

উত্তর:


202

paramsএকটি হ্যাশ মত একটি নিয়ামক সৌন্দর্য মধ্যে, কিন্তু এটি আসলে একটি দৃষ্টান্ত হচ্ছে ActionController::Parameters, যা যেমন বিভিন্ন পদ্ধতি প্রদান করে requireএবং permit

requireপদ্ধতি নিশ্চিত একটি নির্দিষ্ট পরামিতি উপস্থিত থাকলে, এবং এটি যদি উপলব্ধ নয়, যে requireপদ্ধতি একটি ত্রুটি ছোঁড়ার। এটি ActionController::Parametersকীটি পাস করার জন্য একটি উদাহরণ দেয় require

permitপদ্ধতিটি কেবল অনুমোদিত কী এবং মানগুলি ফেরত দিয়ে প্যারামিটার অবজেক্টের একটি অনুলিপি দেয়। একটি নতুন অ্যাক্টিভেকর্ড মডেল তৈরি করার সময়, কেবল অনুমোদিত বৈশিষ্ট্যগুলি মডেলটিতে প্রেরণ করা হয়।

এটি দেখতে অনেকটা শ্বেত তালিকাভুক্ত মত যা পূর্বে অ্যাক্টিভেকর্ড মডেলগুলিতে অন্তর্ভুক্ত ছিল তবে এটি নিয়ামকের মধ্যে থাকার জন্য এটি আরও বোধ করে।


37
পারমিট অন্য হ্যাশ যে শুধুমাত্র রয়েছে কী অনুমতি এবং (এই গুরুত্বপূর্ণ) সঙ্গে সাড়া দিতে হবে ফেরৎ: পারমিট বিবরণ বন্ধ একটি বিট trueকরতে permitted?পদ্ধতি। ডিফল্টরূপে, একটি দৃষ্টান্ত ActionController::Parametersবর্গ ফিরে আসবে falseজন্য permitted?জবাবে trueকরার permitted?মানে প্যারামিটার বস্তুর ভর নিয়োগ ব্যবহার করা যেতে পারে; অন্যথায় অ্যাপ্লিকেশন একটি নিষিদ্ধঅ্যাট্রিবিউট ত্রুটি নিক্ষেপ করবে।
সমরাহ

3
Chaining দেয় permitউপর requireএছাড়াও অনুমতি এবং ফিরে বস্তু প্রয়োজনীয় পরামিতি অন্তর্ভুক্ত?
ডেনিস

আমি নামকরণটিকে দুর্ভাগ্যজনক বলে মনে করি, যেমন অনুমোদিত প্যারামিটার প্রয়োজনের চেয়ে প্রয়োজনীয়তা আরও অনেক কিছু করে। Params.permit (: ব্যক্তি,: নাম,: বয়স) ব্যবহার করা কার্যকর হয় না এবং একটি সাধারণ ফর্মের জন্য "আনপারমিটড প্যারামিটার: utf8" এর মতো ত্রুটি উত্পন্ন করে।
দামেয়েন

6

আরও সুনির্দিষ্ট হতে হবে, যখন আপনি উদাহরণ তৈরি করেন। করছেন .new(...), সেখানে :personপ্রয়োজনীয় দ্বারা নির্দেশিত হ্যাশ থাকতে হবে এবং ব্যক্তি হ্যাশ কেবল অনুমতি দ্বারা স্বীকৃত :nameএবং :ageনির্দেশিত হবে ।

উদাহরণ:

.new(person: { name: "Bhojendra", age: 32 }) // okay
.new(person: { name: "Rauniyar" }) // okay
.new(person: { name: "Bhojendra", other: 'asdf' }) // not okay, other not permitted
.new(person: { full_name: "Bhojendra Rauniyar" }) // not okay, full_name not permitted
.new(detail: { name: "Bhojendra", age: 32 }) // not okay, must be person

তৃতীয় এবং চতুর্থ not okayউদাহরণ কী ভিজ্যুয়ালাইজ করতে পারে?
p0k8_

@ p0k8_ আমি এটি পরিষ্কার করার জন্য উত্তর সম্পাদনা করেছি। এই উদাহরণগুলি কিছু পৃথক ক্ষেত্রের নাম দেখায় যা "অনুমোদিত" ছিল না।
হ্যারি উড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.