2010-02-03 10 views
9

मैंने खोज की और बहुत कोशिश की, लेकिन मैं इसे पूरा नहीं कर सकता जैसा कि मैं चाहता हूं .. तो यहां मेरी समस्या है।रेलों में formtastic के साथ एक एसोसिएशन (has_many) मॉडल से फ़ील्ड का उपयोग

class Moving < ActiveRecord::Base 
    has_many :movingresources, :dependent => :destroy 
    has_many :resources, :through => :movingresources 
end 

class Movingresource < ActiveRecord::Base 
    belongs_to :moving 
    belongs_to :resource 
end 

class Resource < ActiveRecord::Base 
    has_many :movingresources 
    has_many :movings, :through => :movingresources 
end 

Movingresourcesquantity की तरह, अतिरिक्त फ़ील्ड शामिल हैं। हम 'बिल' के विचारों पर काम कर रहे हैं।

<%= form.input :workers, :as => :check_boxes %> 

और मुझे एक असली अच्छी चेकबॉक्स सूची मिलकर पूरी रिश्ते की बात को सरल बनाने के लिए फॉर्मेटस्टिक के लिए धन्यवाद। लेकिन जो मुझे अब तक नहीं मिला है वह है: मैं उस मॉडल से अपने वांछित फ़ील्ड के अगले चेकबॉक्स के नीचे, 'मूवर्ससोर्स' से अतिरिक्त फ़ील्ड का उपयोग कैसे कर सकता हूं?

मैंने विभिन्न दृष्टिकोणों को देखा, मुख्य रूप से वस्तुओं की एक सरणी के माध्यम से मैन्युअल रूप से लूपिंग और उचित रूपों का उपयोग करके, एक form.inputs भाग में, या नहीं। लेकिन इनमें से कोई भी समाधान साफ़ नहीं था (उदाहरण के लिए संपादन दृश्य के लिए काम किया लेकिन नए के लिए नहीं, क्योंकि आवश्यक वस्तुओं को निर्मित या उत्पन्न नहीं किया गया था और उन्हें उत्पन्न करने से गड़बड़ी हुई थी)।

मैं इसके लिए अपने समाधान जानना चाहता हूं!

उत्तर

8

ठीक है, मैंने accepts_nested_attributes_for की क्रांति को याद किया, यह बताता है कि यह वास्तव में क्यों काम नहीं कर रहा है।

यह मैं एक बड़ा कदम आगे है, लेकिन मुझे लगता है कि कहीं न कहीं मैं अभी भी अपने जटिल संबंधों के साथ कुछ जटिलताओं होगा^_^

class Moving < ActiveRecord::Base 
    has_many :movingworkers, :dependent => :destroy 
    has_many :workers, :through => :movingworkers 
    accepts_nested_attributes_for :movingworkers 
end 


<% form.inputs :for => :movingworkers do |movingworker| %> 
    <%= movingworker.inputs :worker, :quantity %> 
<% end %> 
+1

ध्यान दें कि वास्तविक अंतर्निहित मॉडल सीधे फॉर्मबिल्डर के माध्यम से पहुंचा जा सकता है, इस प्रकार: 'movingworker.object'। Action_view/helpers/form_helper.rb में पंक्ति 1244 देखें: 'attr_accessor: object_name,: ऑब्जेक्ट,: विकल्प' –

+0

आप सही हैं। कई चीजें बदल गई हैं और मैंने कई नई चीजें सीखी हैं, यह अब मेरे लिए स्पष्ट है लेकिन इसका उल्लेख किया जाना चाहिए। – pduersteler

1

यदि फ़ील्ड नए दृश्य में मौजूद नहीं हैं, तो आप केवल यह जांच सकते हैं कि यह नया है (new_record?) और फ़ील्ड का एक अलग सेट प्रस्तुत करें (यदि आप आंशिक रूप से लपेटते हैं तो यह काफी साफ हो सकता है दृष्टिकोण)।

+0

धन्यवाद, तुम सही हो। लेकिन चूंकि मैं रेल के साथ काम करता हूं, इसलिए मुझे सादगी के लिए उपयोग किया जाता है, इसलिए मैं अपने पसंदीदा चुनने के लिए अन्य समाधान मांग रहा हूं। और मुझे यह भी लगता है कि यह कुछ अन्य लोगों की मदद कर सकता है। – pduersteler

4

Formtastic की: label_method विकल्प मदद कर सकता है। जैसे

<%= form.input :movingworkers, :label_method => :worker %> 

या

<%= form.input :movingworkers, :label_method => Proc.new { |x| "#{x.worker} #{x.quantity}" } %>