2011-11-08 12 views
25

यह मेरा फॉर्म आंशिक है:रेल: नियंत्रक/कार्रवाई को देखने में कैसे निर्धारित करें

<%= f.simple_fields_for :photo_attributes, :html => { :multipart => true } do |d| %> 
    <%= d.label :image, :label => 'Upload logo', :required => false %> 
    <%= d.file_field :image, :label => 'Image, :required => false', :style => 'margin-bottom:2px' %> 
    <%= d.input :image_url, :label => 'Billed URL', :required => false %> 
<% end %> 

अगर कार्रवाई संपादित होती है तो मैं इसे इसके बजाय दिखाना चाहता हूं:

<%= f.simple_fields_for :photo, :html => { :multipart => true } do |d| %> 
    <%= d.label :image, :label => 'Upload logo', :required => false %> 
    <%= d.file_field :image, :label => 'Image, :required => false', :style => 'margin-bottom:2px' %> 
    <%= d.input :image_url, :label => 'Billed URL', :required => false %> 
<% end %> 

मैं इसे कैसे प्राप्त कर सकता हूं?

उत्तर

26

आम तौर पर फॉर्म आंशिक केवल फ़ील्ड होते हैं, न कि फ़ॉर्म टैग या फ़ील्ड के लिए, लेकिन यदि आपके पास कोई अन्य तरीका नहीं है, तो आप हमेशा देख सकते हैं कि params[:action] वर्तमान में सेट और व्यवहार कर रहा है।

7

आप की तरह

<%- form_url = @object.new_record? ? :photo_attributes : :photo %> 
<% f.simple_fields_for form_url, :html => { :multipart => true } do |d| %> 

यही है, अगर आप के खिलाफ जांच करने के लिए एक @object है कुछ लिख सकते हैं। अन्यथा आप action_name (और यहां तक ​​कि controller_name) का उपयोग कर सकते हैं।

तो कुछ की तरह:

<%- form_url = action_name == :edit ? :photo : :photo_attributes %> 
<% f.simple_fields_for form_url, :html => { :multipart => true } do |d| %> 

आशा इस मदद करता है।

90

current_page?(action: 'edit')

देखें ActionView::Helpers::UrlHelper#current_page?

रेल भी तरीकों दृश्य में उपयोग के लिए controller_path, controller_name, action_name उपलब्ध कराता है।

+3

यह स्वीकार किया जाना चाहिए के भीतर बयान answer-- 'current_page? 'कमाल है। – thekingoftruth

+5

हम्म। मैंने ऐसे मामलों को देखा है जहां यह अपेक्षित काम नहीं करता है। यानी जब 'नियंत्रक_नाम ==' साइट'' और 'action_name == 'home'' लेकिन' current_page? (नियंत्रक:' साइट ', क्रिया:' घर ')' झूठी वापसी करता है। – thekingoftruth

+0

सहमत हैं। यह उत्तर वही है जो आप खोज रहे हैं। –

1

रेल 5 का उपयोग @ _controller.action_name: प्रदर्शन कार्रवाई दृश्य के भीतर

<%= action_name %> 

तो दृश्य

<% if action_name == "edit" %> 
    This is an edit action. 
<% end %> 
संबंधित मुद्दे