में एकाधिक-इनपुट वर्चुअल विशेषताओं को ले जाएं डेटाबेस में ऊंचाई में संग्रहित किया जाता है।सरलफॉर्म कस्टम इनपुट घटक
हालांकि फुट और इंच रूप में अपने स्वयं के व्यक्तिगत आदानों की जरूरत है:
Height: [_______] feet [_______] inches
तो मैं आभासी विशेषताओं का इस्तेमाल किया, और काम मिल गया।
class Client < ActiveRecord::Base
attr_accessible :name, :height_feet, :height_inches
before_save :combine_height
def height_feet
height.floor/12 if height
end
def height_feet=(feet)
@feet = feet
end
def height_inches
if height && height%12 != 0
height%12
end
end
def height_inches=(inches) #on save?
@inches = inches
end
def combine_height
self.height = @feet.to_d*12 + @inches.to_d #if @feet.present?
end
end
और _form
आंशिक simple_form का उपयोग कर:
<%= simple_form_for(@client) do |f| %>
<ul>
<%= f.error_notification %>
<%= f.input :name %>
<%= f.input :weight %>
<li>
<%= f.input :height_feet, :label => 'Height', :wrapper => false %>
<span>feet</span>
<%= f.input :height_inches, :label => false, :wrapper => false %>
<span>inches</span>
</li>
<%= f.error :base %>
</ul>
<%= f.button :submit %>
<% end %>
यह काम करता है यहाँ मेरी मॉडल का एक सरलीकृत संस्करण है। लेकिन यह आदर्श नहीं है।
मैं इस सूख और एक custom input component तो मैं <%= f.input :height, as: :feet_and_inch %>
-और इसलिए किसी भी अन्य इनपुट कि एक ही पैटर्न <%= f.input :wingspan, as: :feet_and_inch %>
के रूप में इस तरह के इस प्रकार के साथ फार्म के लिए ऊंचाई में जोड़ सकते हैं बनाना चाहते हैं।
मैं और इसी तरह कस्टम घटकों के साथ प्रयोग किया है, लेकिन मैं दो आदानों के लिए नहीं मिल सकता है प्रदर्शित-और मुझे यकीन है कि जहां फुट और इंच इंच से 'रूपांतरण' तर्क डाल करने के लिए सबसे अच्छी जगह है नहीं कर रहा हूँ (इंच से पैरों और इंच तक)।
एक साधारण सहायक विधि का उपयोग क्यों नहीं करते? मेरे लिए कस्टम इनपुट घटक जोड़ने की कोई आवश्यकता नहीं है ... और फॉर्म निर्माता प्राप्त करने वाला एक सहायक तरीका, आपको जो चाहिए, वह करने के लिए सबसे सरल और सबसे DRY तरीका है। :) और रूपांतरण तर्क के लिए, यह इस बात पर निर्भर करता है कि आप उन तर्कों का उपयोग कहां करते हैं ... यदि यह केवल विचारों में है, तो उन्हें सहायक तरीके से रखें, अन्यथा मॉडल एक अच्छी जगह है। – Kulgar
एक छोटे से गहरे खुदाई करने के कारणों में से एक यह है कि वर्तमान कार्यान्वयन में त्रुटि संदेशों को पैर और इंच इनपुट के बीच प्रदर्शित किया जाता है, दोनों के बाद, उन्हें एक सहायक विधि में ले जाना हल नहीं होगा इस। वैसे, इनपुट के लिए धन्यवाद! – bookcasey
यदि कोई दिलचस्पी लेता है, तो यह इतना सिरदर्द साबित हुआ कि मैंने '5'10" ',' 5'11 "', '6'' जैसे विकल्पों के साथ एक एकल चयन तत्व का उपयोग करने का निर्णय लिया, जिसमें' वैल ' इंच (70,71,72) में सेट करें जो थोड़ा लूप के साथ करना मुश्किल नहीं था। – bookcasey