रेल की परिमों ने समझाया?


228

किसी को भी paramsनियंत्रक समझा सकता है : वे कहाँ से आते हैं, और वे क्या संदर्भित कर रहे हैं?

  def create
    @vote = Vote.new(params[:vote])
    item = params[:vote][:item_id]
    uid = params[:vote][:user_id]
    @extant = Vote.find(:last, :conditions => ["item_id = ? AND user_id = ?", item, uid])
    last_vote_time = @extant.created_at unless @extant.blank?
    curr_time = Time.now
  end

मैं इस कोड लाइन-बाय-लाइन को पढ़ने और समझने में सक्षम होना चाहूंगा कि क्या हो रहा है।


2
सर्वर साइड वेब डेवलपमेंट पर आपकी पृष्ठभूमि क्या है? आप पहले से कौन सी तकनीकें जानते हैं?
मॉरीशो लिन्हार्स

3
मैं वर्षों से HTML और CSS के साथ हूं। लिया गया कक्षाएं जो PHP, JS और Java का उपयोग करती हैं। यद्यपि php के साथ बहुत कम MVC का उपयोग किया जाता है। मैंने वास्तव में जावा का उपयोग करके प्रोग्रामिंग सीखी। और मैं डेटाबेस सिद्धांत को अच्छी तरह से समझता हूं।
Dru

जवाबों:


281

जब पृष्ठ का अनुरोध किया जाता है, तो उपयोगकर्ता उपयोगकर्ता के ब्राउज़र से आते हैं। HTTP GET अनुरोध के लिए, जो सबसे आम है, parl url में एन्कोड किए गए हैं। उदाहरण के लिए, यदि उपयोगकर्ता का ब्राउज़र अनुरोध करता है

http://www.example.com/?foo=1&boo=octopus

तब params[:foo]"1" params[:boo]होगा और "ऑक्टोपस" होगा।

एचटीटीपी / एचटीएमएल में, परम वास्तव में कुंजी-मूल्य वाले जोड़े की एक श्रृंखला है जहां कुंजी और मूल्य तार होते हैं, लेकिन रूबी ऑन रेल्स में एक विशेष वाक्यविन्यास होता है जिससे परमेस अंदर हैश के साथ एक हैश हो सकता है। उदाहरण के लिए, यदि उपयोगकर्ता का ब्राउज़र अनुरोध करता है

http://www.example.com/?vote[item_id]=1&vote[user_id]=2

फिर params[:vote]एक हैश params[:vote][:item_id]होगा , "1" params[:vote][:user_id]होगा और "2" होगा।

Rails params पर रूबी PHP में $ _REQUEST सरणी के बराबर हैं ।


13
$ _REQUEST के बराबर $ _REQUEST में डेटा, पोस्ट और कुकी डेटा शामिल हैं, जबकि params केवल डेटा प्राप्त करते हैं और पोस्ट करते हैं।
परज़िफ़ल

3
@renocor POST डेटा रेल paramsहैश में भी शामिल है। कुकी डेटा sessionहैश में शामिल है ।
रिचर्ड जोन्स

यह उत्तर एक अन्य स्रोत को छोड़ देता है: URL। अधिक जानकारी के लिए हम्मीर का उत्तर देखें।
रिचर्ड जोन्स

1
टोस्टरल्विन, ऐसा लगता है कि आपने मेरे उत्तर के दूसरे वाक्य को नहीं पढ़ा या पहले उदाहरण को देखें।
डेविड ग्रेसन

1
@AnkitDhingra ... मुझे लगता है कि यह हमेशा स्ट्रिंग होगा क्योंकि HTTP params वास्तव में केवल कुंजी / मूल्य जोड़ी हैं और रेल (शायद रैक मणि) पार्स में है कि कुंजी मूल्य के अनुसार हैश और सरणियों में है, लेकिन मैंने इस तरह का कुछ भी नहीं देखा है जो बताता है कि मूल्य एक संख्या है।
रब्रीप्रिन

75

जैसा कि अन्य ने बताया है, paramsमान किसी GET अनुरोध के क्वेरी स्ट्रिंग, या POST अनुरोध के प्रपत्र डेटा से आ सकते हैं, लेकिन एक तीसरा स्थान भी है जिससे वे आ सकते हैं: URL का पथ।

जैसा कि आप जानते हैं, रेल अपने संबंधित नियंत्रक कार्यों के लिए सीधे अनुरोध करने के लिए कुछ मार्गों का उपयोग करता है। इन मार्गों में ऐसे सेगमेंट हो सकते हैं जो URL से निकाले जाते हैं और डाल दिए जाते हैं params। उदाहरण के लिए, यदि आपके पास इस तरह का मार्ग है:

match 'products/:id', ...

फिर URL जैसे अनुरोध पर http://example.com/products/42सेट params[:id]किया जाएगा 42


आपको दूसरा परम कैसे मिलता है? जैसे / स्क्वाड / आईडी / सदस्य / आईडी / सामान
वेटेमेस्टेव

48

परमेस में निम्नलिखित तीन समूह हैं:

  1. उपयोगकर्ता द्वारा दिए गए पैरामीटर
    • प्राप्त करें (http://domain.com/url?param1=value1¶m2=value2 params [: param1] और params [: param2]) सेट करेगा
    • POST (उदाहरण के लिए JSON, XML स्वचालित रूप से पार्स हो जाएगा और संग्रहीत होगा)
    • नोट: डिफ़ॉल्ट रूप से, रेल उपयोगकर्ता द्वारा प्रदत्त मापदंडों को डुप्लिकेट करता है और उन्हें params में संग्रहीत करता है [: user] यदि UsersController में, wra_parameters सेटिंग के साथ बदला जा सकता है
  2. रूटिंग पैरामीटर
    • match '/user/:id' मार्गों में।
  3. डिफ़ॉल्ट पैरामीटर
    • params[:controller]और params[:action]हमेशा उपलब्ध है और इसमें वर्तमान नियंत्रक और कार्रवाई शामिल है

1
क्या आप अपने नोट को User supplied parametersथोड़ा और बढ़ा सकते हैं? उदाहरण के लिए, UsersController में परम हैश का एक उदाहरण सहायक होगा। आपके उदाहरण से लगता है कि यह हैश की तरह आवाज़ करेगा: {first_name: "mike", user: {first_name: "mike"} ...} क्या यह सही है?
7stud

1
मुझे लगता है कि rails4 में नहीं देख रहा हूँ। उदाहरण के लिए, {"_method"=>"put", "authenticity_token"=>"gubHya6uQrQLjPRXhOC0RUuCRdn7NFr6CeKrbRfBSHI=", "ripe"=>"true", "action"=>"update", "controller"=>"apples", "id"=>"4"}। मुझे माफ कर दो अगर मैं गलत हूँ, मैं एक रेल शुरुआत हूँ। आपके नोट के अनुसार, मुझे यह देखना चाहिए: {"_method"=>"put", "authenticity_token"=>"gubHya6uQrQLjPRXhOC0RUuCRdn7NFr6CeKrbRfBSHI=", "ripe"=>"true", "apple" => {"ripe"=>"true"}, "action"=>"update", "controller"=>"apples", "id"=>"4"} मुझे नहीं पता कि आरईएल 4 में मजबूत मापदंडों के साथ करना है या नहीं।
7stud

2
मैं रेल 4 में डुप्लिकेट किए गए पार्म्स को देख रहा हूं, लेकिन केवल json POST अनुरोधों (Angularjs का उपयोग करके) Rails के स्वयं के HTML पोस्ट के तहत नहीं। यह लिंक बताता है कि क्यों: stackoverflow.com/questions/10774972/…
होमन

13

मूल रूप से, पैरामीटर उपयोगकर्ता निर्दिष्ट डेटा रेल अनुप्रयोग के लिए है।

जब आप कोई फॉर्म पोस्ट करते हैं, तो आप इसे आमतौर पर GST अनुरोध के विपरीत POST अनुरोध के साथ करते हैं। जब आप साइट को ब्राउज़ करते हैं तो आप सामान्य अनुरोधों को GET अनुरोधों के रूप में सोच सकते हैं, यदि यह मदद करता है।

जब आप एक फॉर्म जमा करते हैं, तो नियंत्रण को एप्लिकेशन पर वापस फेंक दिया जाता है। आपके द्वारा फॉर्म में जमा किए गए मूल्य कैसे प्राप्त करते हैं? paramsमैं दिखाता हूं।

अपने कोड के बारे में। @vote = Vote.new params[:vote]परमेट्स [: वोट] के डेटा का उपयोग करके डेटाबेस में नया वोट बनाता है। आपके द्वारा सबमिट किए गए आपके फ़ॉर्म को उपयोगकर्ता के नाम पर रखा गया था: वोट, इसका सभी डेटा इस में है: हैश का वोट फ़ील्ड।

आइटम प्राप्त करने के लिए अगली दो पंक्तियों का उपयोग किया जाता है और उपयोगकर्ता को फॉर्म जमा किया जाता है।

@extant = Vote.find(:last, :conditions => ["item_id = ? AND user_id = ?", item, uid])

सबसे नया, या अंतिम सम्मिलित किया गया, डेटाबेस से आइटम item_id = आइटम और user_id = uid के साथ वोट करता है।

अगली पंक्तियों में अंतिम वोट समय और वर्तमान समय लगता है।


6

रेल की तरफ, paramsएक विधि है जो एक ActionController::Parametersवस्तु लौटाती है। Https://stackoverflow.com/a/44070358/5462485 देखें


3
paramsएक विधि है कि स्पष्ट करने के लिए +1 । रूबी तरीकों से चर को भेद करना मुश्किल बना सकता है
samrap
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.