Rails 3 link_to (: method =>: delete) لا يعمل
-
30-09-2019 - |
سؤال
أنا أواجه مشكلة مع أفعالي في القضبان...
عرض صفحة لمورد (كلب) الذي has_many (البراغيث). مدمج في الكلب show.html.haml
هي دعوة ل render @dog.fleas
الذي يجد (؟) تلقائيًا ويستخدم القالب في "البراغيث/_flea.html.haml" لإدراج كل براغيث مرتبطة بالكلب المذكور.
هذا يعرض بشكل صحيح. يا للعجب الآن ، بجانب كل براغيث ، وضعت رابط "Kill Freea" الذي يذهب إلى عنوان URL: //localhost:3000/dogs/1/fleas/7
. الذي تم إنشاؤه بواسطة:
= link_to("Kill Flea", [ flea.dog, flea ], :method => :delete, :confirm => "Sure? A bunny will die")
ولكن في كل مرة يتم فيها النقر على هذا الرابط ، لا يوجد تأكيد ... ويجعل البراغيث show.html
صفحة. يبدو الأمر كما لو أنه يستخدم احصل على على /dogs/1/fleas/7
بدلاً من حذف?!?
ملاحظة- لا تقلق بشأن العناكب والروبوتات التي تحذف الأشياء في قاعدة البيانات الخاصة بي ... أحاول فقط تعلم القضبان .. وفهم ما يحدث
المحلول
يستخدم Rails 3 JavaScript غير مزعج الآن. في Rails 2.3 ، ستقوم Erb فقط بجمع كل هذا JavaScript الفوضوي مباشرة في الرابط نفسه ، في حدث onclick. الآن تم نقل JavaScript خارج الرابط ، وفي ملفات JS الخارجية. تأكد من أن لديك هذا في تخطيطك:
<%= javascript_include_tag :all %>
إذا كان لديك هذا ، فقد تكون هناك مشاكل أعمق لإبقاء JavaScript من الركض ، ولكن هذا هو المكان المناسب للبدء. اسمحوا لي أن أعرف كيف اتضح.
نصائح أخرى
مرحبًا ، يمكنك أيضًا تجربة هذا:
application.html.erb:
<%= javascript_include_tag 'jquery_ujs' %>
OR
<%= javascript_include_tag "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js", "jquery.rails.js" %>
افحص <%= javascript_include_tag %>
في application.html.erb
ربما تفتقد إلى "التطبيق" JS
يجب أن تبدو على الأقل مثل
<%= javascript_include_tag "application" %>
أنا هنا لا أستخدم javaScript_include_tag: الكل ،: التطبيق وما إلى ذلك ، أنا أستخدم ملفات JS الخاصة بي ، مع اسم مخصص آخر: JavaScript_Include_tag: my_custom_file ولدي أيضًا هذه المشكلة. وأنا لا أستخدم "= طلب jQuery" في الملف ، لكن JavaScript/JQuery يعمل. أعتقد أن القضبان تتضمن jQuery افتراضيًا. ما فعلته هو أنني غيرت
link_to "Logout", destroy_user_session_path, :method => :delete
إلى
form_tag destroy_user_session_path, :method => :delete, :id => "logout_form"
link_to 'Logout', "#delete", :onclick => "$('#logout_form').submit();"
الآن يعمل بشكل جيد.
تحقق إذا كان التطبيق. html.erb
<%= javascript_include_tag :application %>
ليس كما:
<%= javascript_include_tag :default %>
يبدو أن طريقة link_to الخاصة بك ليست صحيحة تمامًا. حاول استخدام هذا الرمز بدلاً من ذلك:
<%= link_to 'Kill Flea', [flea.dog, flea], :confirm => 'Sure?', :method => :delete %>