2012-05-27 6 views
55

में पास पैरामीटर मेरे खाते इंडेक्स पेज सभी खातों की सूची देता है, और प्रति खाते में "सेवा" का लिंक होता है; यह उपयोगकर्ता को/my_services/नए पृष्ठ पर निर्देशित करना चाहिए और खाता आईडी पृष्ठ पर कौन से लिंक पर क्लिक किया गया था, इस पर निर्भर करता है कि उपयुक्त आईडी के साथ खाता_आईडी फ़ील्ड को पूर्व-जनित किया गया है।रेल - लिंक_to

मेरे पास प्रत्येक पृष्ठ के नीचे डीबग (पैरा) है, और मैं जो कोशिश कर रहा हूं, उसके साथ मुझे कुछ भी नहीं मिल रहा है: नियंत्रक और:/my_services/new पेज के लिए मेरे पैरामीटर में दिखाई देने वाली क्रिया ।

लिंक मैं कोशिश कर रहा है यह है:

link_to "+ Service", "my_services/new", :account_id => acct.id 

मैं तो यह भी सेवाओं नियंत्रक में तर्क है:

def new 
    @my_service = MyService.new 
    if params[:account_id] 
    @my_service.account_id = params[:account_id] 
    end 
end 

कोई ऐसा करने का उचित तरीके के साथ मदद कर सकते हैं? मैं अभी तक कोशिश की कुछ छोटी छोटी हैकी चीजों के साथ इसे पाने में सक्षम नहीं हुआ है।

संपादित

, निकलती है तो भविष्य में कोई इस जवाब पर, (routes.rb में shallow: true विकल्प के साथ संभवतः) लग रही है नेस्ट संसाधनों जाने का रास्ता होने लगते हैं। इस हिस्से के लिए मेरे routes.rb अब इस तरह दिखता है:

resources :accounts, shallow: true do 
    resources :services 
end 

मेरे लिंक अब इस तरह दिखना:

<%= link_to "+ Service", new_service_path(:service => { :account_id => @account.id }) %> 

उत्तर

85

पहले, LINK_TO एक HTML टैग सहायक है, इसका दूसरा तर्क यूआरएल, html_options द्वारा पीछा किया है। आप क्या चाहते हैं कि पथ में यूआरएल पैरामीटर के रूप में account_id को पास करना है। यदि आपने मार्ग.आरबी में सही ढंग से नामित मार्ग स्थापित किए हैं, तो आप पथ सहायक का उपयोग कर सकते हैं।

link_to "+ Service", new_my_service_path(:account_id => acct.id) 

मुझे लगता है कि सबसे अच्छा अभ्यास के रूप में एक परम भीतर नेस्ट मॉडल मान प्रदान करने के लिए है:

link_to "+ Service", new_my_service_path(:my_service => { :account_id => acct.id }) 

# my_services_controller.rb 
def new 
    @my_service = MyService.new(params[:my_service]) 
end 

और आपको लगता है कि ACCOUNT_ID 'बड़े पैमाने पर काम' के लिए अनुमति दी है नियंत्रित करने के लिए की जरूरत है। रेल 3 में आप नियंत्रक के भीतर वैध पैरा को फ़िल्टर करने के लिए शक्तिशाली नियंत्रण का उपयोग कर सकते हैं, जहां यह संबंधित है। मै इसकी अत्यधिक सिफारिश करता हु।

http://apidock.com/rails/ActiveModel/MassAssignmentSecurity/ClassMethods

भी ध्यान रखें कि यदि ACCOUNT_ID स्वतंत्र रूप से (उपयोगकर्ता द्वारा सेट नहीं है जैसे, कोई उपयोगकर्ता केवल एक सेवा खुद ही ACCOUNT_ID के लिए प्रस्तुत कर सकते हैं, तो यह अनुरोध के माध्यम से इसे भेजने के लिए बेहतर नहीं अभ्यास है, आप निश्चित रूप से दो गठजोड़ कर सकते हैं अगर आप केवल उन अपने स्वयं के खाते पर सेवा बनाने की अनुमति है, लेकिन किसी को भी व्यवस्थापक attr_accessible में भूमिकाओं का उपयोग करके है बनाने की अनुमति

@my_service.account_id = current_user.account_id 

: लेकिन जैसे कुछ जोड़कर नियंत्रक के भीतर यह निर्धारित किया है।

आशा है कि यह मदद करता है

+0

मैं आश्चर्य है कि अगर यह LINK_TO "सेवा" काम करेंगे, "? My_services/नई ACCOUNT_ID =" + acct.id –

1
link_to "+ Service", controller_action_path(:account_id => acct.id) 

यह अभी भी काम कर रहे पथ की जांच नहीं कर रहा है:

$ rake routes 
संबंधित मुद्दे