2011-03-19 16 views
15

मैं अपने पहले रेल ऐप (रेल 3) में कुछ आसान करने की कोशिश कर रहा हूं और मुझे यकीन नहीं है कि मैं क्या गलत कर रहा हूं, या यदि कोई बेहतर दृष्टिकोण है। वेब पर या यहां कुछ भी नहीं मिला है जो बहुत खोज के बावजूद मेरे लिए हल कर चुका है।रेल 3: बटन_to के माध्यम से मनमानी पैरामीटर पास करें?

ऐप में मेरे पास वर्करेक्वेस्ट और आलेख हैं। एक आलेख देखते समय, मैं एक वर्कआरक्वेट बनाने के लिए एक बटन चाहता हूं, और जब नया वर्करेक्वेस्ट प्रपत्र प्रकट होता है, तो आलेख भर जाता है। अनिवार्य रूप से, मैं Article.id को नए WorkRequest को पास करने का प्रयास कर रहा हूं।

पैरामीटर जोड़कर लिंक_इन में काम करता है, लेकिन मैं इसे एक बटन होना चाहता हूं। हालांकि यह आलेख फ़ॉर्म के HTML में क्वेरी पैरामीटर के रूप में दिखाई देता है, यह कभी भी WorkRequest.new विधि को नहीं मिलता है। This 2010 से आलेख कुछ विस्तार में समस्या बताता है, लेकिन समाधान मेरे लिए काम नहीं करता है (पृष्ठ के अंत में मेरी टिप्पणी देखें।)

ऐसा लगता है कि यह करना काफी आसान और सामान्य बात होना चाहिए (एक बार जब मैं इसे समझता हूं, तो मेरे अपने ऐप में कई अन्य जगहें हैं जहां मैं वही काम करना चाहता हूं) लेकिन मैं कुछ दिनों के लिए इस विशेष दीवार के खिलाफ अपने सिर को टक्कर लगी हूं। मैं रेल के लिए नया हूं - यह मेरा पहला ऐप है - इसलिए मुझे उम्मीद है कि कोई और अनुभवी मदद कर सकता है!

अग्रिम धन्यवाद।

उत्तर

6

बस वापस चक्कर में इस को पूरा करने को दिखाते हैं। आखिरकार मैंने इसे link_to का उपयोग करके हल किया लेकिन इसे बटन की तरह दिखने के लिए jQuery का उपयोग किया। @किशी, अगर आप कह रहे हैं कि आपने बटन को बटन_टू के साथ बनाया है, तो मैं कोड देखना चाहता हूं, लेकिन जैसा कि मुझे jQuery पसंद है, जहां तक ​​मुझे चिंतित है (इस ऐप के लिए, वैसे भी।)

यहां अनुच्छेद # कोड में कोड देखें। (कक्षा क्या बनाता है यह jQuery के माध्यम से एक बटन की तरह लग रही है।)

<%= link_to "New Request", new_work_request_path(:article_id => @article.id), :class => "ui-button" %> 

यहाँ Work_Request नियंत्रक की नई विधि में कोड है:

if !params[:article_id].blank? 
    @work_request.article = Article.find(params[:article_id]) 
end 

फिर Work_Request # नया दृश्य यह ठीक हो जाता है।

1

लेख # में

<%= button_to("Add WorkRequest", {:controller => "work_request", :action => "new", :article_id => @article.id})%>

work_requests # नई

<%= f.text_field :article_id, :value => params[:article_id]%>

+1

यह काम नहीं करता है, किशी। मुझे एक त्रुटि मिलती है: "कोई रूट मैचों"/work_requests/new "। ठीक है, मुझे इसके बारे में पता है: ऐसा इसलिए है क्योंकि यह POST का उपयोग कर रहा है और इसे GET का उपयोग करने की आवश्यकता है। इसे जोड़कर ठीक कर सकते हैं: method =>: प्राप्त करें, जैसे: '<% = button_to (" वर्कआरक्वेट जोड़ें ", {: नियंत्रक =>" work_requests ",: action =>" new ",: module_id => @ pier_module.id},: method =>: get)%>' लेकिन पैरामीटर छीन लिया गया है। यह समस्या है। इस आलेख में मैंने अपने मूल प्रश्न में लिंक किए गए लेख में विस्तार से विस्तार से बताया है। –

+1

नोट करें कि यदि आप अपना बटन_to लिंक करने के लिए link_to में बदलते हैं, तो लिंक और बटन मिश्रण करना सिर्फ अजीब लगता है। मुझे लगता है कि मैं एक मेनू लेआउट का सहारा ले सकता है, जो सभी लिंक का उपयोग करेगा, लेकिन मैं नहीं देख सकता कि कोई बटन मनमानी पैरामीटर क्यों नहीं पारित कर सकता है। बात यह है कि मुझे यकीन नहीं है कि यह इरादा व्यवहार है, कम से कम मामले में तर्कसंगत सीखना इसके लिए मुझे इसकी समझ में मदद मिलेगी, या यदि यह 'बग' है या यदि मैं ऐसा करने का प्रयास कर रहा हूं तो ऐसा करने का एक बेहतर तरीका है। –

+0

आप रेल के किस संस्करण का उपयोग करते हैं? मेरा जवाब पोस्ट करने से पहले मैंने इसे चेक किया और यह अच्छा हुआ! –

3

मैं सिर्फ वही समस्या मारा और मैं इसे पैरामीटर गुजर इस प्रकार से काम मिल गया:

<%= button_to("Add WorkRequest", new_work_request_path(:article_id => @article.id), :action => "new", :method => :get)%> 
6

अपने routes.rb फ़ाइल में कोड की इस पंक्ति जोड़ें।

resources :work_requests do 
    member do 
    post 'new' 
    end 
end 

यह जीईटी विधि नहीं होना चाहिए क्योंकि आप सर्वर पर जानकारी भेज रहे हैं: module_id। यह तब काम करेगा।

<%= button_to("Add WorkRequest", {:controller => "work_request", :action => "new", :article_id => @article.id})%> 
+0

'संग्रह' नहीं होना चाहिए 'सदस्य' –

0

आप घोंसला अपने resources:work_requests अपने routes.rb में :articles भीतर के लिए है, तो पार कर लेते हैं अपने params[:id] जो आपके article_id हो सकता है और button_to कॉल करने के लिए :method => :get जोड़ना होगा, आप ठीक होना चाहिए।

# config/routes.rb 
resources :articles do 
    resources :work_requests 
end 

# app/views/articles/show.html.erb 
<%= button_to "Add Work Request", new_article_work_request_path(params[:id]), 
    :method => :get %> 

# app/controllers/work_requests_controller.rb 
class WorkRequestsController < ApplicationController 

    ... 
    def new 
    @work_item = WorkItem.new 
    @article = Article.find(params[:article_id]) 
    ... 
    end 

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