मेरे रेल 4 एप्लिकेशन पर प्रत्येक लिंक_ दो बार बुलाया जा रहा है

मुझे अपने रेल 4 एप्लिकेशन के साथ कुछ असामान्य व्यवहार का अनुभव हो रहा है। प्रत्येक बार जब मैं अपने विचारों के अंदर एक लिंक_ पर क्लिक करता हूं, तो मेरे नियंत्रक कार्यों को दो बार बुलाया जाता है। उदाहरण के लिए:

मेरे root_url में मेरे पास users_profile के लिए यह मानक कॉल है:

<%= link_to('User Profile', users_profile_path, :class => "logout-button") %>

जब मैं इस लिंक पर क्लिक करता हूं, तो मेरा कंसोल निम्न आउटपुट दिखाता है:

Started GET "/users/profile" for 127.0.0.1 at 2013-11-25 20:45:53 -0200
Processing by Users::SessionsController#profile as HTML
  User Load (0.7ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 45 ORDER BY "users"."id" ASC LIMIT 1
  InvestorProfile Load (0.5ms)  SELECT "investor_profiles".* FROM "investor_profiles" WHERE "investor_profiles"."user_id" = $1 ORDER BY "investor_profiles"."id" ASC LIMIT 1  [["user_id", 45]]
  EmployeeProfile Load (0.5ms)  SELECT "employee_profiles".* FROM "employee_profiles" WHERE "employee_profiles"."user_id" = $1 ORDER BY "employee_profiles"."id" ASC LIMIT 1  [["user_id", 45]]
  Rendered users/sessions/_investor_setup.html.erb (3.9ms)
  Rendered users/sessions/profile.html.erb within layouts/application (5.2ms)
Completed 200 OK in 19ms (Views: 11.2ms | ActiveRecord: 2.5ms)


Started GET "/users/profile" for 127.0.0.1 at 2013-11-25 20:45:53 -0200
Processing by Users::SessionsController#profile as HTML
  User Load (0.3ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 45 ORDER BY "users"."id" ASC LIMIT 1
  InvestorProfile Load (0.3ms)  SELECT "investor_profiles".* FROM "investor_profiles" WHERE "investor_profiles"."user_id" = $1 ORDER BY "investor_profiles"."id" ASC LIMIT 1  [["user_id", 45]]
  EmployeeProfile Load (0.2ms)  SELECT "employee_profiles".* FROM "employee_profiles" WHERE "employee_profiles"."user_id" = $1 ORDER BY "employee_profiles"."id" ASC LIMIT 1  [["user_id", 45]]
  Rendered users/sessions/_investor_setup.html.erb (3.3ms)
  Rendered users/sessions/profile.html.erb within layouts/application (4.1ms)
Completed 200 OK in 12ms (Views: 7.5ms | ActiveRecord: 1.2ms)

लोगों को अक्सर यह व्यवहार होता है जब एक दूरस्थ (उदाहरण के लिए जेएस) विधि को बुलाता है, लेकिन यह मेरा मामला नहीं है। अजीब हिस्सा यह है कि, यदि मैं अपने ब्राउज़र पर users_profile_path पर सीधा यूआरएल डालता हूं। मुझे केवल अपने रेल कंसोल पर एक अनुरोध मिलता है:

Started GET "/users/profile" for 127.0.0.1 at 2013-11-25 20:48:17 -0200
Processing by Users::SessionsController#profile as HTML
  User Load (0.3ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 45 ORDER BY "users"."id" ASC LIMIT 1
  InvestorProfile Load (0.3ms)  SELECT "investor_profiles".* FROM "investor_profiles" WHERE "investor_profiles"."user_id" = $1 ORDER BY "investor_profiles"."id" ASC LIMIT 1  [["user_id", 45]]
  EmployeeProfile Load (0.2ms)  SELECT "employee_profiles".* FROM "employee_profiles" WHERE "employee_profiles"."user_id" = $1 ORDER BY "employee_profiles"."id" ASC LIMIT 1  [["user_id", 45]]
  Rendered users/sessions/_investor_setup.html.erb (3.4ms)
  Rendered users/sessions/profile.html.erb within layouts/application (4.2ms)
Completed 200 OK in 12ms (Views: 7.7ms | ActiveRecord: 1.1ms)

मुझे अपने आवेदन के अंदर हर लिंक के लिए यह वही परिणाम मिल रहा है, न केवल यह।

0
मुझे पूरा यकीन है कि जेएस इस व्यवहार का कारण नहीं बना रहा है। मैंने विभिन्न ब्राउज़रों के साथ प्रयास किया और सभी एक ही व्यवहार करते हैं। मैं कुछ बदलाव कर रहा हूं और मेरा मानना ​​है कि टर्बोलिंक्स मणि इसके लिए उत्तरदायी है।
जोड़ा लेखक Guilherme Barros Avila, स्रोत
जैसा कि मैंने भविष्यवाणी की थी। टर्बोलिंक्स व्यवहार कर रहा था और वास्तव में यह इसके अंदर एक छिपी हुई जेएस समस्या थी। जैसे ही मैंने इसे अपने application.js से हटा दिया, समस्या बंद हो गई। मदद के लिए बहुत शुक्रिया दोस्तों।
जोड़ा लेखक Guilherme Barros Avila, स्रोत
@RichPeck मैंने बस अपने application.js से टर्बोलिंक मणि हटा दिया .. और मैंने दोगुनी अनुरोध प्राप्त करना बंद कर दिया। इस पंक्ति को हटा दिया गया: //= turbolinks की आवश्यकता है
जोड़ा लेखक Guilherme Barros Avila, स्रोत
@RichPeck ने मेरे प्रश्न का उत्तर दिया;)
जोड़ा लेखक Guilherme Barros Avila, स्रोत
@GuilhermeBarrosAvila application.js को हटाने के बाद आप कैसे ठीक करने में कामयाब रहे हैं इस पर कोई खबर?
जोड़ा लेखक Richard Peck, स्रोत
डिट्टो - ईमेल करेगा !!!
जोड़ा लेखक Richard Peck, स्रोत
जवाब के लिए धन्यवाद! टर्बोलिंक्स वास्तव में आपकी ऐप प्रक्रियाओं के http अनुरोधों के साथ दक्षता में सुधार करता है - आप jQuery टर्बोलिंक को आजमा सकते हैं यह देखने के लिए कि क्या चिकनी चीज़ों में मदद मिलती है! हालांकि मुझे वापस पाने के लिए धन्यवाद
जोड़ा लेखक Richard Peck, स्रोत
तो बिल्कुल कोई जावास्क्रिप्ट नहीं है, क्या आप निश्चित हैं? नियंत्रक के लिए आपके यूनिट परीक्षण में क्या होता है? एक और ब्राउज़र को भी देखें कि यह वही काम करता है या नहीं।
जोड़ा लेखक Martin Capodici, स्रोत
ठीक है आप मणि के बिना कोशिश कर सकते हैं और वापस रिपोर्ट कर सकते हैं? यह कुछ प्रकार के क्लाइंट साइड इश्यू की तरह लगता है, हालांकि वेब सर्वर को दो अनुरोध प्राप्त हुए हैं। तो रेल आपके नियंत्रक को दो बार कॉल करके 'सही' चीज कर रही है। अनुलेख एक त्वरित रूप से देखा गया था और टर्बोलिंक्स मुझे लगता है जैसे यह जावास्क्रिप्ट उत्पन्न कर सकता है :-)
जोड़ा लेखक Martin Capodici, स्रोत
@RichPeck - Stackoverflow पर यहां आप पर टक्कर लगी मजाकिया :-)
जोड़ा लेखक Martin Capodici, स्रोत
क्या आप प्रश्न में नियंत्रक जोड़ सकते हैं? शायद एक redirect_to या प्रस्तुत करें चारों ओर तैर रहा है?
जोड़ा लेखक jstim, स्रोत

3 उत्तर

मैं वास्तव में इसे अपने आप हल करने में कामयाब रहा। रेल 4.0 के साथ स्थापित एक डिफ़ॉल्ट मणि है, इसे टर्बोलिंक * कहा जाता है।

किसी कारण से, इस मणि * में उपयोग की जाने वाली जावास्क्रिप्ट * मेरे सर्वर पर दोगुनी अनुरोध कर रही थी। यही कारण है कि केवल जीईटी अनुरोध इस तरह व्यवहार कर रहे थे, और POST अनुरोध सामान्य थे। मैं अभी भी पूरी तरह से समझ नहीं पा रहा हूं कि क्यों मणि * इसका कारण बनता है, लेकिन जब मैंने अपनी application.js फ़ाइल से निम्न पंक्ति को हटा दिया, तो दोगुनी अनुरोध बंद हो गए।

=// require turbolinks
0
जोड़ा

यदि आप चाहते हैं कि आपका ऐप अभी भी टर्बोलिंक्स का उपयोग करे, तो " टर्बोलिंक से बाहर निकलना " कोड जो आपको समस्याएं दे रहा है वह रास्ता है; बस डेटा-नो-टर्बोलिंक जोड़ें।

मुझे बूटस्ट्रैप 3 का उपयोग करने में समस्याएं थीं और इसे ठीक करने के लिए जोड़ा गया था। उदाहरण के लिए;

  • <%= link_to download_path(item) do %> <button type="button" class="btn btn-success">Download</button> <% end %>
  • 0
    जोड़ा

    एक और समाधान टैग में डेटा-नो-टर्बोलिंक जोड़ना है।

    More info here: http://blog.flightswithfriends.com/post/53943440505/how-to-disable-turbolinks-in-rails-4

    0
    जोड़ा