2011-03-31 13 views
9

रेल 2.3.5, रुबी 1.8.7 का उपयोग करना।रेल: 'शो' व्यू और 'एडिट' व्यू मैच

क्या कोई प्लगइन है जो मेरे "शो" और "एडिट" और "नए" पृष्ठों को समान दिखने और महसूस करने में आसान बना देगा? मुझे निम्नलिखित प्रकार की चीज़ करने में सक्षम होना अच्छा लगेगा। अभी, अगर मैं अपने मॉडल में कोई फ़ील्ड जोड़ता हूं, तो मुझे इसे edit.html.erb और view.html.erb दोनों में जोड़ना होगा। मैं काफी व्यापक रूप से दिखने में सक्षम होना चाहता हूं, लेकिन मैं इसे देखने के लिए "संपादित करें" और "शो" चाहता हूं (दोनों के बीच अपवादों के साथ, शायद, लेकिन बहुत से नहीं।)

क्या कोई DRY टूल है इस? तब

<% plugin_show_helper_for @model do |show_helper| %> 
    <%= render :partial => 'common_look', :locals => {:helper => show_helper} %> 
<% end %> 

:

अनिवार्य रूप से, मैं होने के लिए मेरी "edit.html.erb" बनाने के लिए सक्षम होने के लिए करना चाहते हैं:

<% plugin_form_helper_for @model do |form_helper| %> 
    <%= render :partial => 'common_look', :locals => {:helper => form_helper} %> 
<% end %> 

और show.html.erb हो "form_helper" और "show_helper" एक ही इंटरफेस को कार्यान्वित करेगा (दोनों के लेआउट/लुक के बीच थोड़ा अंतर बनाने के लिए शाखा की कुछ क्षमता के साथ।)

उत्तर

0

में _form.html.erb में स्निपेट शामिल है, फिर उसे कॉल करें में show.html.erb

जैसे सामान्य आंशिक, फिर अपने नियंत्रक में, बिंदु दिखाएं और उसी आंशिक (show.html.erb) या उस तरह कुछ संपादित करें।

+0

मैं इनपुट फ़ील्ड दिखाने के लिए "शो" नहीं करना चाहते, मैं चाहता हूँ "शो" खेतों रेंडर करने के लिए के लिए सही संस्करण का उपयोग सुनिश्चित करें कि है पाठ के रूप में मैं सिर्फ फ़ील्ड की सूची, उनके आदेश, उनके युक्त divs, आदि होना चाहता हूं। –

+0

मैं थॉमस से सहमत हूं। क्या आपने अभी तक इसके लिए एक अच्छा समाधान पाया है?मैं वही सटीक चीज़ चाहता हूं जिसके लिए आप पूछ रहे हैं !! – MattSlay

2

मैं कुछ ऐसा करता हूं जो आप कस्टम इनपुट/प्रदर्शन सहायक कार्यों के साथ वर्णन कर रहे हैं।

<%= my_field_helper(:model, :field_name) %> 

और अपने नियंत्रक में, आप या तो :show या :edit करने के लिए एक @context चर सेट: एक सरल उदाहरण के लिए, यदि आप एक समारोह आप इस तरह कहेंगे हो सकता था। सहायक कोड @context पर एक स्विच में शामिल है, और अगर यह :edit है, यह की तरह कुछ आउटपुट

<li> 
    <label>Translation of Field</label> 
    <input name="model[field_name]" value="???" /> 
</li> 

(संभवतः, अपने सभी नियंत्रकों में एक सामान्य @model चर का उपयोग एक ही समारोह आपके सभी पृष्ठों पर इस्तेमाल किया जा सकता है - या पारित समारोह अपने आप में), लेकिन करने के लिए @my_model जब @context:show है (या शायद डिफ़ॉल्ट रूप से), यह कुछ इस तरह आउटपुट:

<li> 
    <span class="label">Translation of Field</label> 
    <span class="value">Field Value</span> 
</li> 

तो अब आप अपने सभी क्षेत्रों को दिखाने के लिए एक ही सटीक कोड का उपयोग कर सकते हैं! आप शायद उस कोड को आंशिक रूप से खींचना चाहते हैं, ताकि आप आसानी से इसे संपादित करने के लिए एक रूप में लपेट सकें, लेकिन शो के लिए नहीं, लेकिन महत्वपूर्ण बिट पूरा हो गया है - यदि आपको फ़ील्ड जोड़ने/स्थानांतरित करने/हटाने की आवश्यकता है, आपको केवल एक ही स्थान पर जाना है।

आशा है कि इससे मदद मिलती है!

+0

यह करने योग्य है, लेकिन यह एप्लिकेशनहेल्पर में कई विधियों को जोड़ता है, जिसमें से सभी शाखा @context के मूल्य पर हैं। जब एक चर चर पर व्यवहार शाखाएं अक्सर होती हैं, तो मुझे लगता है कि आप उन्हें एक ही इंटरफेस के साथ दो अलग-अलग वर्गों में अलग करना चाहते हैं। निश्चित रूप से, इस तरह मैं इसे स्वयं लागू कर दूंगा यदि मैं इसे स्वयं लागू कर रहा हूं ... –

+0

@ थॉमस - यह एक बुरा विचार नहीं है। नियंत्रक में '@renderer = ShowRenderer.new (@my_model) 'की तरह कुछ और फिर <<% = @ renderer.field (: field_name)%>' दृश्य में ... मुझे यह पसंद है! –

+0

मैं उस नियंत्रक में शामिल नहीं होगा। इसके बजाय, मैं "शो रेन्डरर" बना सकता हूं। यही वह था जो मैं अपने मूल कोड स्निपेट में प्राप्त कर रहा था - plugin_show_helper_for @model {| सहायक | ...} ShowRenderer बना देगा और इसे ब्लॉक में पास करेगा। (मैंने इसे 'सहायक' कहा, लेकिन हम इसे रेंडरर कहेंगे।) सामान्यतः, नियंत्रक के पास कोड नहीं होना चाहिए जो रेंडरर के बारे में कुछ भी जानता हो। (क्या आप एक्सएमएल आउटपुट के लिए एक ही @ डेंडरर बनाना चाहते हैं, उदाहरण के लिए?) –

3

एक प्लगइन है!

https://github.com/codez/dry_crud

यह बहुत लचीला .. केवल आपके रेल 2.3

+0

यह मुझे स्पष्ट नहीं है कि यह मेरी मदद कैसे करता है, लेकिन मैं गहरी खुदाई करूंगा। शीर्ष स्तर के उदाहरण कई नियंत्रकों में सामान्यीकरण के बारे में हैं, जो मैं नहीं चाहता हूं। मैं एक विशेष नियंत्रक के लिए एक बिल्कुल जटिल लेआउट के साथ "शो" दृश्य और "संपादन/नया" फ़ॉर्म दृश्य देखना चाहता हूं। ऐतिहासिक कारणों से, मैं एक बार में सैकड़ों फ़ील्ड से निपट रहा हूं, टैब के माध्यम से समूहों में अलग हो गया हूं। –

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