link_to изтриване на url не работи

Имам следната връзка_за изтриване на url в приложението си

<%=link_to "Delete",blog_path(@blog.id), :method => :delete, :class => "delete", :confirm => "Are you sure ?"%>  

Изглежда, че не работи. Когато щракна върху този URL адрес, той просто ме отвежда до пътя на показване. Може ли някой да ми каже как да поправя това. Благодаря.


person felix    schedule 12.12.2010    source източник
comment
Какъв е вашият маршрут (routes.rb) за блогове?   -  person aceofspades    schedule 12.12.2010
comment
опитайте да въведете „рейк маршрути“ и покажете резултата ...   -  person wizztjh    schedule 20.12.2010


Отговори (8)


Използвате ли jQuery? Ако е така, мисля, че проблемът може да е, че използвате jQuery без актуализирания файл rails.js.

Изтеглете rails.js тук: https://github.com/rails/jquery-ujs/raw/master/src/rails.js Пуснете го във вашата директория с javascripts, като презапишете rails.js, който идва по подразбиране с rails.

Добавете ред за включване на javascript, за да го включите.

  <%= javascript_include_tag "rails" %>

Поставете това след маркера за включване на Jquery. Вероятно също искате да изключите настройките по подразбиране на javascript, ако не планирате да използвате прототип.

Включих потребителския интерфейс на jQuery в моето приложение, открих, че изтриването вече работи като шоу, но след като направих по-горе Разрешен проблем.

person Sean Ahrens    schedule 20.12.2010
comment
@felix, хей, ако мислиш, че този отговор е страхотен, мислиш ли, че можеш да го свържеш с приет отговор? =) тххххх - person Sean Ahrens; 06.01.2015

Уверете се, че тези редове се появяват в application.js:

 //= require jquery
 //= require jquery_ujs
person Matoeil    schedule 03.08.2012

Уверете се, че сте включили java script. В противен случай :method => :delete действа точно както е показано в Rails.

person klew    schedule 12.12.2010
comment
тогава трябва да проверите дали сте заредили rails.js и нямате грешки в javascript на страницата. - person iain; 12.12.2010
comment
@Felix: ако не виждаш Сигурен ли си? когато щракнете върху тази връзка, значи нещо с js не е наред. - person klew; 12.12.2010

Ако използвате спокойно маршрутизиране за блогове, тогава трябва да работи следното:

<%= link_to "Delete", @blog, :method => :delete, :confirm => "Are you sure ?"%>
person clemensp    schedule 12.12.2010

Можете да опитате с 'data-method' вместо :method.

<%=link_to "Delete",blog_path(@blog.id), 'data-method' => :delete, :class => "delete", :confirm => "Are you sure ?"%> 

Можете да проверите на jquery_ujs.js следната част от кода:

// Handles "data-method" on links such as:
// <a href="/bg/users/5" data-method="delete" rel="nofollow" data-confirm="Are you sure?">Delete</a>
person rorra    schedule 05.09.2011

За да може link_to да работи с метода delete, Rails се нуждае от ненатрапчив скриптов адаптер за jQuery.

  • Уверете се, че вашият Gemfile има

    gem 'jquery-rails'

  • Уверете се, че app/assets/javascripts/application.js има

    //= require jquery
    //= require jquery_ujs

  • Уверете се, че вашето приложение/views/layouts/application.html.erb има

    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
    <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>

    вътре в маркера head. Премахнете секцията 'data-turbolinks-track' => true, ако не планирате да използвате Turbolinks.

person Mihai Dinculescu    schedule 08.02.2016

трябва да използвате

<%=button_to "Delete",blog_path(@blog.id), :method => :delete, :class => "delete", :confirm => "Are you sure ?"%>  
person thiagoh    schedule 24.11.2012

Възможно е да имате работещ link_to без jQuery

Намерих най-добрия процес за създаване на работеща връзка за изтриване за ruby ​​on rails без jQuery! Тук вече давам отговор: https://stackoverflow.com/a/67710994/14387700

Но за да улесня това, пиша това отново тук.

Трябва да работим с 3 неща:

  1. Добавяне на метод за унищожаване в articles_controller.rb
  2. Настройка на routes.rb
  3. LINK_TO етикет

Да започваме...

Добавяне на метод за унищожаване в articles_controller.rb

Първо ще добавим def destroy ... end в articles_controller.rb, нека отворим:

# app/controllers/articles_controller.rb

  def destroy
    @article = Article.find(params[:id])
    @article.destroy
    params[:id] = nil
    flash[:notice] = "Art has been deleted"
    redirect_to :action => :index
  end

Тук

  1. в първия ред извикваме променлива '@article', която ще намери и избере параметрите ID на статията на rails конзолата от нашата база данни. Тогава,
  2. във 2-ри ред променливата @article ще направи командата за унищожаване в конзолата. тогава,
  3. в 3-ти ред: параметрите на id ще бъдат изтрити и
  4. в 4-ти ред, съобщение ще мига в страницата на приложението Изкуството е изтрито и също ще покаже в конзолата, че не е намерено нищо в базата данни.
  5. В 5-ти ред, след като процесът на унищожаване приключи, ще бъдем пренасочени към индексната страница на статията.

Това е основният фактор, който ще даде команда за унищожаване. и направи link_to работещ.

Настройте routes.rb

НО ПОЧАКАЙТЕ Имаме нужда от 2 маршрута за страницата за унищожаване, които са:

  1. Настройка на GET протокол
  2. Настройка на протокол DELETE

В маршрутите просто добавете:

  resources :articles, except: [:destroy] # this will add all get request links automatically except destroy link

  post '/articles/new' => 'articles#create'
  post '/articles/:id' => 'articles#update'
  post '/articles/:id/edit' => 'articles#update' # this 3 lines are needed for other forms purpose

  # we need this 2 lines for our delete link_to setup
  delete 'articles/:id/delete' => 'articles#destroy', as: 'articles_delete'
  get '/articles/:id/delete' => 'articles#destroy'
  

Тук

  1. Вторият последен ред декларира метода DELETE,

    • 'articles/:id/delete' will be the link structure in post link tag (known as: anchor tag in HTML) for every single post,
    • '=›' насочва структурата на връзката към маркера на контролера, който е 'articles#destroy',
    • след това дефинирахме текста на пътя, като зададохме ** като: 'articles_delete'**, което ще използваме като: 'articles_delete_path' или 'articles_delete_url' в етикета link_to.

Тогава

  1. в последния ред дефинирахме заявката за получаване на връзката за изтриване, която ще ни даде работеща връзка като https://2haas.com/articles/1/delete с изключение на /articles/1/destroy, което означава, че можем да персонализираме нашата връзка за изтриване от тези 2 метода настройка с повече допълнителна информация..

Последният най-сладък резултат за изтриване

Желаният таг link_to

можем да използваме това, за да получим правилен етикет за изтриване link_to, който ще работи.

<%= link_to 'Delete Article', articles_delete_path, method: :delete %>
<%= link_to 'Delete Article', articles_delete_url, method: :delete %>

<% obj.each do |post| %>
<%= link_to 'Delete Article', articles_delete_path(post), method: :delete %>
<% end %>

И това е направено с изключение на jQuery

Благодаря, че прочетохте правилно този отговор!

ЩАСТЛИВО ПРОГРАМИРАНЕ

person Abrar Jahin    schedule 27.05.2021