मुझे नेस्टेड मॉडल रूपों में समस्या है जिसमें रेडियो बटन होते हैं, जब मेरे पास कई मॉडल होते हैं तो सभी रेडियो बटनों को एक ही समूह में माना जाता है।कई नेस्टेड मॉडलों के साथ रेल फॉर्म रेडियो समूहों के साथ समस्याएं पैदा करता है
मेरे मॉडल इस तरह एक has_many संबंध शामिल हैं:
class Order < ActiveRecord::Base
has_many :order_items
accepts_nested_attributes_for :order_items
end
Class OrderItem < ActiveRecord::Base
belongs_to :order
end
मैं तो एक आंशिक कि OrderItem
मॉडल
<% fields_for "order[order_items_attributes][]", order_item do |f| %>
और इस फार्म के भीतर निहित का उपयोग कर प्रपत्र बनाता है रेडियो बटन का एक समूह है
radio_button_tag "order[order_items_attributes][][colour_id]", "#{colour.id}"
टी के साथ पाश के लिए एक के अंदर बनाया जब केवल एक बच्चा होता है तो उसका काम ठीक होता है, हालांकि जैसे ही मैं कई बच्चों को सम्मिलित करता हूं, सभी रेडियो बटन एक ही समूह के होते हैं क्योंकि उनके पास एक ही विशेषता name="order[order_items_attributes][][colour_id]"
है। यह सब एक नए मॉडल रूप पर है, इसलिए मैं सर इंडेक्स (name="order[order_items_attributes][0][colour_id]"
) का उपयोग नहीं कर सकता क्योंकि रेल त्रुटि expected Hash (got Array) for param 'order_items_attributes'
मैं उस अंतिम भाग के बारे में गलत था, त्रुटि इसलिए थी क्योंकि मैं अनुक्रमित और गैर अनुक्रमित नाम विशेषताओं को मिला रहा था। इंडेक्स वैल्यू जोड़ना इसे हल करने की कुंजी थी। पहले
{"order_items_attributes"=>
[{"size"=>"Small",
"colour_id"=>"4"},
{"size"=>"Small"}],
"first_name"=>"sdf",
"last_name"=>"sdf",
"email"=>"[email protected]"}
आप केवल देख सकते हैं:
यहाँ params[:order]
हैश की सामग्री को जब केवल एक नेस्टेड मॉडल मौजूद है:
{"order_items_attributes"=>
[{"size"=>"Small",
"colour_id"=>"4"],
"first_name"=>"sdf",
"last_name"=>"sdf",
"email"=>"[email protected]"}
और जब दो नेस्टेड मॉडल मौजूद हैं order_item
में यह colour_id विशेषता है। यह तब भी होता है जब चयनित रेडियो बटन का कौन सा मॉडल संबंधित होता है (जो समझ में आता है)।
मैं रेडियो बटन कैसे प्रस्तुत कर सकता हूं जैसे कि यह प्रत्येक बच्चे मॉडल के लिए एक अलग समूह बनाता है?
यदि आप पैराम्स [: ऑर्डर] हैश की सामग्री पेस्ट कर सकते हैं तो मामले में केवल 1 नेस्टेड ऑर्डर_इटम (यानी मामला जो काम करता है) और उस मामले के लिए जहां 1 से अधिक नेस्टेड ऑर्डर_इटम है (यानी वह मामला जहां यह काम नहीं करता है)। दोनों उदाहरणों के लिए, स्टैक ओवरफ़्लो में पेस्ट करने से पहले पैरा को [: ऑर्डर] हैश को सुंदर प्रिंट के माध्यम से चलाएं। – nelstrom