2012-04-20 15 views
6

में परिवर्तन पर गतिशील नेस्टेड फॉर्म मैंने रयान बेट्स नेस्टेड मॉडल फॉर्म का उपयोग किया है, यह ठीक काम कर रहा है, लेकिन
मेरे पास दो मॉडल हैं I, ई स्टोरेज और आदेश दोनों नामक नेस्टेड मॉडल हैं।चुनिंदा बॉक्स

संग्रहण:

has_many :orders 
has_many :items, :dependent => :destroy 
accepts_nested_attributes_for :items 

आदेश:

belongs_to:storage   
has_many :items, :dependent => :destroy 
accepts_nested_attributes_for :items 

आदेश को ध्यान में रखते भंडारण सलेक्ट बॉक्स नहीं है,

<%= f.select :storage_id, 
      Storage.all.map{|s| [s.store_no, s.id]} %> 

भंडारण संख्या संबंधित आइटम आदेश के रूप में प्रकट होता है चाहिए का चयन पर आंशिक
के साथ कोई भी शरीर मुझे बता सकता है करने का सबसे अच्छा तरीका है।

धन्यवाद,

उत्तर

7

पहले आप उस इनपुट क्षेत्र को देखने के लिए यह बदल गया है को देखने के लिए की जरूरत है। तो, यह सोचते हैं:

  1. भंडारण चयनकर्ता
  2. भंडारण चयनकर्ता अपने मूल्य

'के रूप में भंडारण' की आईडी है 'भंडारण' का एक आईडी है ... आप इस डाल सकता है अपने storage.coffee.js फ़ाइल में:

jQuery -> 
    $('select#storage').change -> 
    storage_id = $('option:selected',this).val() 
    $.get 'storages/' +storage_id+ '/orders.js' 

फिर, यह सोचते हैं कि आदेश भंडारण के तहत नेस्टेड रहते हैं, अपने OrdersController इसलिए की तरह लग रहा है, तो:

OrdersController < ApplicationController 

    def index 
    @storage = Storage.find(params[:storage_id]) 
    @orders = @storage.orders 
    end 

end 

... और आप एक आंशिक app/views/orders/_order.html.erb ...

है ... और अगर आप अपने पृष्ठ पर एक div#orders है आप चाहते हैं कि आदेश में ...

गिरा दिया है, तो ..

$('div#orders').html('<%= escape_javascript(render @orders) %>'); 

यह आदेश है कि किसी भी भंडारण के हैं के प्रत्येक उदाहरण के लिए आंशिक की एक प्रति प्रस्तुत करना और बाद डोम से संलग्न करना चाहिए: तो फिर तुम एक app/views/orders/index.js.erb फ़ाइल इसलिए की तरह बनाने के लिए सक्षम होना चाहिए भंडारण चयनकर्ता।

क्या हो रहा है: जब चयन मेनू बदल जाता है तो यह दिए गए भंडारण के लिए ऑर्डर इंडेक्स को जेएस प्राप्त करने का अनुरोध करता है। फिर वह अनुरोध स्वचालित रूप से index.js पृष्ठ को प्रस्तुत करने का प्रयास करेगा, उस दृश्य में उपलब्ध नियंत्रक में सेट आवृत्ति चर के साथ। उस दृश्य में जेएस जो भी इंटरपोलटेड रूबी डाला जाता है उसके बाद निष्पादित होगा, इसलिए आप रेल कार्यों का उपयोग कर सकते हैं (जैसे render @orders) और फिर उन लोगों का आउटपुट $('div#orders').html('your rendered orders will be inserted in here by rails') के माध्यम से डोम में इंजेक्शन दिया जाता है।

स्पष्ट रूप से आपको इसे अपने पृष्ठ पर फिट करने के लिए इसे ट्विक करना होगा, मैं बस अनुमान लगा रहा हूं कि आपके पृष्ठ के कौन से तत्व कहलाए जाते हैं, लेकिन इस मूल अवधारणा को ठीक काम करना चाहिए। अगर आपका कोई प्रश्न हैं, तो मुझे से पूछें।

+0

आपके उत्तर के लिए धन्यवाद मैंने रेल 2.3.5 और प्रोटोटाइप का उपयोग किया है और अवधारणा का पालन किया है। –

संबंधित मुद्दे