2011-08-13 14 views
7

मैं फ़ॉर्म_for सबमिट पर यूआरएल कैसे पास करूं? मैं प्रत्येक नियंत्रक क्रियाओं को इंगित करने वाले प्रत्येक बटन के साथ एक फॉर्म का उपयोग करने की कोशिश कर रहा हूं, एक खोज है और दूसरा एक बना है। क्या एक ही फॉर्म पर विभिन्न कार्यों के साथ 2 सबमिट बटन संभव है?form_for एकाधिक नियंत्रक कार्यों के साथ

<%= form_for @people do |f| %> 
    <%= f.label :first_name %>: 
    <%= f.text_field :first_name %><br /> 

    <%= f.label :last_name %>: 
    <%= f.text_field :last_name %><br /> 

    <%= f.submit(:url => '/people/search') %> 
    <%= f.submit(:url => '/people/create') %> 
<% end %> 

उत्तर

20

दबाए गए बटन के आधार पर विभिन्न यूआरएल में एक फॉर्म जमा करने के लिए एक सरल रेल तरीका नहीं है। आप अलग-अलग यूआरएल को सबमिट करने के लिए प्रत्येक बटन पर जावास्क्रिप्ट का उपयोग कर सकते हैं, लेकिन इस स्थिति को संभालने का अधिक आम तरीका फॉर्म को एक यूआरएल में जमा करने की अनुमति देना है और यह पता लगाने के लिए कि नियंत्रक कार्रवाई में कौन सा बटन दबाया गया था।

इस तरह एक बटन के साथ प्रस्तुत दूसरा दृष्टिकोण के लिए:

def create 
    if params[:first_button] 
    # Do stuff for first button submit 
    elsif params[:second_button] 
    # Do stuff for second button submit 
    end 
end 

दोनों दृष्टिकोण के बारे में अधिक के लिए this similar question देखें:

<%= form_for @people do |f| %> 
    # form fields here 
    <%= submit_tag "First Button", :name => 'first_button' %> 
    <%= submit_tag "Second Button", :name => 'second_button' %> 
<% end %> 

आपकी कार्रवाई कुछ इस तरह दिखेगा।

इसके अलावा, मल्टीबटन फॉर्म पर Railscast episode 38 देखें।

+1

सहमत हैं, चीजों को सरल रखें, मूल दृष्टिकोण का उपयोग करें, ** जेएस ** * एक्शन यूआरएल * प्रबंधित कर सकते हैं। मैं आपको – Anatoly

2

यह सवाल, बहुत this one के समान है, हालांकि यह थोड़ा अलग

मैं सिर्फ हाइलाइट करने के लिए कि aforementionned सवाल का कुछ जवाब भी मार्गों के लिए बाधाओं को जोड़ने के लिए सुझाव दिया चाहता था तो आप कर सकते हैं करने के लिए वास्तव में मार्ग प्रश्नों विभिन्न नियंत्रक कार्रवाई!

लेखक को श्रेय, vss123

हम रेल में उन्नत बाधाओं का उपयोग कर हल किया।

विचार एक ही पथ (और इसलिए उसी मार्ग का नाम है & कार्रवाई) लेकिन विभिन्न कार्रवाइयों के लिए रूटिंग बाधाओं के साथ।

resources :plan do 
    post :save, constraints: CommitParamRouting.new("Propose"), action: :propose 
    post :save, constraints: CommitParamRouting.new("Finalize"), action: :finalize 
end 

CommitParamRouting एक साधारण वर्ग एक विधि मैचों है कि है? जो सत्य देता है यदि प्रतिबद्ध param paramed instance attr से मेल खाता है। मूल्य।

यह एक मणि commit_param_matching के रूप में उपलब्ध है।

+0

को पुनर्स्थापित करने के लिए समायोजित सीएसएस के साथ खोज के लिए एक और फॉर्म का उपयोग करने का सुझाव दूंगा नोट करें कि जेएस-आधारित उत्तरों के विपरीत जो फॉर्म एक्शन यूआरएल को प्रतिस्थापित करता है, यह विधि पूरी तरह बैकएंड पर निर्भर करती है और उन ग्राहकों के लिए भी काम करेगी जिन्होंने जावास्क्रिप्ट को अक्षम किया है –

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