Ruby on Rails 5.2 - ActionController::ParamsWrapper

मॉड्यूल एक्शनकंट्रोलर :: ParamsWrapper




ruby

मॉड्यूल एक्शनकंट्रोलर :: ParamsWrapper

एक नेस्टेड हैश में मापदंडों हैश लपेटता है। यह ग्राहकों को बिना किसी मूल तत्वों को निर्दिष्ट किए बिना अनुरोध सबमिट करने की अनुमति देगा।

यह कार्यक्षमता config/initializers/wrap_parameters.rb में सक्षम है और इसे अनुकूलित किया जा सकता है।

प्रारूप सरणी को गैर-रिक्त सरणी में सेट करके आप इसे प्रति नियंत्रक पर भी बदल सकते हैं:

class UsersController < ApplicationController
  wrap_parameters format: [:json, :xml, :url_encoded_form, :multipart_form]
end

यदि आप इसके लिए ParamsWrapper को सक्षम करते हैं :json इस तरह JSON पैरामीटर भेजने के बजाय, :json प्रारूप:

{"user": {"name": "Konata"}}

आप इस तरह से पैरामीटर भेज सकते हैं:

{"name": "Konata"}

और यह एक नेस्टेड हैश में लिपटेगा जो कि नियंत्रक के नाम से मेल खाता है। उदाहरण के लिए, यदि आप UsersController पोस्ट कर रहे हैं, तो आपका नया UsersController हैश इस तरह दिखाई देगा:

{"name" => "Konata", "user" => {"name" => "Konata"}}

आप उस कुंजी को भी निर्दिष्ट कर सकते हैं जिसमें मापदंडों को लपेटा जाना चाहिए, और उन विशेषताओं की सूची भी है जिनका उपयोग करके इसे लपेटना चाहिए :include या इस तरह के विकल्पों को :exclude करें:

class UsersController < ApplicationController
  wrap_parameters :person, include: [:username, :password]
end

सक्रिय रिकॉर्ड मॉडल पर बिना :include या :exclude विकल्प के :exclude सेट करें, यह केवल श्रेणी पद्धति के द्वारा लौटाए गए पैरामीटर को ले attribute_names

यदि आप एक ActiveModel ऑब्जेक्ट (जैसे User.new(params[:user]) ) के मापदंडों को पास करने जा रहे हैं, तो आप इसके बजाय मॉडल वर्ग को विधि में पास करने पर विचार कर सकते हैं। ParamsWrapper वास्तव में मॉडल से विशेषता नामों की सूची निर्धारित करने का प्रयास करेगा और केवल उन विशेषताओं को ParamsWrapper :

class UsersController < ApplicationController
  wrap_parameters Person
end

आप अभी भी पास कर सकते हैं :include जिन विशेषताओं को आप लपेटना चाहते हैं उनकी सूची सेट :exclude लिए :include और :include

डिफ़ॉल्ट रूप से, यदि आप उस कुंजी को निर्दिष्ट नहीं करते हैं जिसमें मापदंडों को लपेटा जाएगा, तो ParamsWrapper वास्तव में यह निर्धारित करने का प्रयास करेगा कि इससे संबंधित मॉडल है या नहीं। यह नियंत्रक, उदाहरण के लिए:

class Admin::UsersController < ApplicationController
end

यह जांचने की कोशिश करेंगे कि क्या Admin::User या User मॉडल मौजूद है, और क्रमशः रैपर कुंजी निर्धारित करने के लिए इसका उपयोग करें। यदि दोनों मॉडल मौजूद नहीं हैं, तो यह कुंजी के रूप में user का उपयोग करने के लिए वापस आ जाएगा।

स्थिरांक

EXCLUDE_PARAMETERS

सार्वजनिक प्रवृत्ति के तरीके

process_action (* args) स्रोत दिखाएं
# File actionpack/lib/action_controller/metal/params_wrapper.rb, line 243
def process_action(*args)
  if _wrapper_enabled?
    wrapped_hash = _wrap_parameters request.request_parameters
    wrapped_keys = request.request_parameters.keys
    wrapped_filtered_hash = _wrap_parameters request.filtered_parameters.slice(*wrapped_keys)

    # This will make the wrapped hash accessible from controller and view.
    request.parameters.merge! wrapped_hash
    request.request_parameters.merge! wrapped_hash

    # This will display the wrapped hash in the log file.
    request.filtered_parameters.merge! wrapped_filtered_hash
  end
  super
end

अनुरोध पर पैरामीटर रैपिंग करता है। धातु कॉल स्टैक द्वारा स्वचालित रूप से कॉल किया जाता है।

सुपरक्लास विधि कहता है