link_to删除网址无法正常工作

时间:2010-12-12 18:45:44

标签: ruby-on-rails link-to form-helpers ruby-on-rails-3

我在我的应用中有以下link_to删除网址

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

它似乎不起作用。当我点击这个网址时,它只是带我去展示路径。有人请告诉我如何解决这个问题。感谢。

8 个答案:

答案 0 :(得分:20)

您使用的是jQuery吗?如果是这样,我认为问题可能是您在没有更新的rails.js文件的情况下使用jQuery。

在这里下载rails.js: https://github.com/rails/jquery-ujs/raw/master/src/rails.js 将它放在javascripts目录中,覆盖默认使用rails的rails.js。

添加javascript包含行以包含它。

  <%= javascript_include_tag "rails" %>

将此内容放在Jquery包含标记之后。如果你不打算使用原型,你可能还想要解除javascript默认值。

我在我的应用程序中包含了jQuery UI,我发现删除现在正在显示,但是在完成上面的已解决问题之后。

答案 1 :(得分:17)

确保这些行显示在application.js

 //= require jquery
 //= require jquery_ujs

答案 2 :(得分:5)

确保您已启用javascript。否则:method => :delete就像在Rails中显示一样。

答案 3 :(得分:4)

如果您正在为博客使用restful路由,那么以下内容应该有效:

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

答案 4 :(得分:4)

您可以尝试使用'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="/users/5" data-method="delete" rel="nofollow" data-confirm="Are you sure?">Delete</a>

答案 5 :(得分:2)

为了link_to使用delete方法,Rails需要unobtrusive scripting adapter for jQuery

  • 确保 Gemfile

    gem 'jquery-rails'

  • 确保app / assets / javascripts / application.js

    //= require jquery
    //= require jquery_ujs

  • 确保你的app / views / layouts / application.html.erb

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

    head标记内。如果您不打算使用Turbolinks,请移除'data-turbolinks-track' => true部分。

答案 6 :(得分:0)

你应该使用

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

答案 7 :(得分:0)

可以在没有 jQuery 的情况下使用 link_to

我找到了在没有 jQuery 的情况下为 ruby​​ on rails 创建工作删除链接的最佳过程!在这里我已经回答了:https://stackoverflow.com/a/67710994/14387700

但为了方便起见,我又在这里写了一遍。

我们需要处理三件事:

  1. articles_controller.rb
  2. 中添加destroy方法
  3. routes.rb 设置
  4. LINK_TO 标记

让我们开始...

在articles_controller.rb中添加destroy方法

首先,我们将在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”,它将从我们的数据库中查找并选择 rails 控制台 上文章的 ID 参数。然后,
  2. 在第 2 行中,@article 变量将在控制台中执行 destroy 命令。然后,
  3. 在第三行:id 参数将被删除
  4. 在第 4 行,应用程序页面中将闪烁通知“艺术已被删除”,并在控制台中显示,在数据库中未找到任何内容。
  5. 在第 5 行,销毁过程完成后,我们将被重定向到文章索引页面。

这是给出破坏命令的主要因素。并使 link_to 正常工作。

设置 routes.rb

等等 我们需要 2 条销毁页面的路由,它们是:

  1. GET 协议设置
  2. 删除协议设置

在路由中添加:

  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' 将是每个帖子的帖子链接标签(在 HTML 中称为:锚标签)中的链接结构,
    • '=>' 将链接结构指向 controller 标记,即 'articles#destroy'
    • 然后我们通过将 ** 设置为:'articles_delete'** 来定义路径文本,我们将其用作: link_to 标记中的“articles_delete_path”或“articles_delete_url”。

然后

  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 之外的已经完成

感谢您正确阅读此答案。

快乐的编程