ruby on rails - कई नेस्टेड मॉडलों के साथ रेल फॉर्म में रेडियोन समूह के साथ समस्याएं होती हैं



ruby-on-rails radio-button (1)

मुझे नेस्टेड मॉडल रूपों में एक समस्या है, जिसमें रेडियो बटन होते हैं, जब मेरे पास कई मॉडल होते हैं तो सभी रेडियो बटन को एक ही समूह में होने के रूप में माना जाता है

मेरे मॉडल में इस तरह के कई अन्य संबंध हैं:

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]" ( name="order[order_items_attributes][0][colour_id]" ) का उपयोग नहीं कर सकता क्योंकि रेल ने त्रुटि की expected Hash (got Array) for param 'order_items_attributes' मैं था उस अंतिम भाग के बारे में गलत, त्रुटि इसलिए थी क्योंकि मैं अनुक्रमित और गैर-अनुक्रमित नाम विशेषताओं को मिला रहा था सूचकांक मूल्य जोड़ना यह हल करने की कुंजी थी।

यहां params[:order] की सामग्री है params[:order] हैश जब केवल एक नेस्टेड मॉडल मौजूद है:

{"order_items_attributes"=>
  [{"size"=>"Small",
    "colour_id"=>"4"],
 "first_name"=>"sdf",
 "last_name"=>"sdf",
 "email"=>"[email protected]"}

और जब दो नेस्टेड मॉडल मौजूद हैं:

{"order_items_attributes"=>
  [{"size"=>"Small",
    "colour_id"=>"4"},
   {"size"=>"Small"}],
 "first_name"=>"sdf",
 "last_name"=>"sdf",
 "email"=>"[email protected]"}

जैसा कि आप देख सकते हैं कि केवल पहले order_item में यह color_id विशेषता है ऐसा लगता है कि चयनित रेडियो बटन का कोई भी मॉडल नहीं था (जो समझ में आता है)।

मैं रेडियो बटन कैसे प्रस्तुत कर सकता हूं जैसे कि प्रत्येक बच्चे के मॉडल के लिए एक अलग समूह बनाता है?


जब आप फ़ील्ड_ के लिए कॉल करते हैं, तो आपको प्रत्येक ऑर्डर आइटम को एक अनन्य अनुक्रमणिका देना होगा यदि आप फ़ील्ड_ को इस तरीके से बुला रहे हैं, तो आपको फ़ील्ड_ के लिए पास किए जाने वाले ऑरेंज के सूचक का ट्रैक रखने की आवश्यकता है नेस्टेड रूपों का उपयोग करके रेल आपके लिए ऐसा कर सकते हैं।

समाधान नेस्टेड रूपों का उपयोग करना है

<%form_for :order do |f|%>
  Form stuff for this particular order.
  If @order.order_items is empty you may need to build one before the next line.
  <%f.fields_for :order_items do |oi_f| %>
    Form stuff for this particular order_item (prefixed with oi_f.)
    <%Colour.all.each do |colour| %>
      <%=oi_f.radio_tag(:colour_id, colour.id)%>
    <%end%>
  <%end%>
<%end%>

ऐसा लगता है कि आप ऑर्डर_ नियंत्रक पर पोस्ट कर रहे हैं, इसलिए यह प्रतिस्थापन में एक बूंद होना चाहिए।