【问题标题】:Delete database row in ROR删除 ROR 中的数据库行
【发布时间】:2016-02-08 13:46:50
【问题描述】:

有人可以帮我为什么以下两段代码不会产生相同的“结果”吗?

选项 1

<%= button_to 'delete', {:controller => "articles", :action => 'destroy', :id => article.id}, 
  :confirm => "Are you sure you want to delete?", :method => :delete %>

选项 2

<%= link_to 'delete', {:controller => "articles", :action => 'destroy', :id => article.id}, 
  :confirm => "Are you sure you want to delete?", :method => :delete %>

选项 1 有效。选项 2 出于某种原因调用控制器中的 Show 操作。有趣的是,选项 2 用于我正在关注的 Ruby On Rails 教程中......

你可以想象我是 ROR 的新手。

【问题讨论】:

标签: ruby-on-rails


【解决方案1】:

为了使link_todelete 方法一起工作,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 具有

    &lt;%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' =&gt; true %&gt;
    &lt;%= javascript_include_tag 'application', 'data-turbolinks-track' =&gt; true %&gt;

    head 标签内。如果您不打算使用 Turbolinks,请删除 'data-turbolinks-track' =&gt; true 部分。

【讨论】:

    【解决方案2】:

    由于浏览器无法发送原生扩展的 HTTP 动词集(DELETE、PUT、PATCH)。 Rails 使用Rack::MethodOverride 中间件来伪造它。

    因此,当您使用 _method = DELETE 参数执行 POST 请求时,Rails 应用收到的请求对象具有 request.method == 'DELETE'

    推荐阅读:

    button_to 创建一个离散形式。所以你的“按钮”实际上是一个带有隐藏输入的表单。

    <form action="articles/1" method="post">
      <input type="hidden" name="_method" value="DELETE">
      <input type="submit">This is the button you see</button>
    </form>
    

    Rails 也非常棒,所以你可以这样做:

    <%= button_to 'delete', article, 
      confirm: "Are you sure you want to delete?", method: :delete %>
    

    只要你遵循rails约定,它就会自己找出路线。

    link_to 使用 javascript 来增强普通的 &lt;a&gt; 元素。 jQuery ujs 驱动程序不是正常行为,而是创建一个类似上面的表单并提交它。

    您遇到link_to 问题的最常见原因是您的jqueryjquery_ujs 没有包含在您的application.js 中,或者您的脚本错误阻止了它的工作.检查浏览器控制台是否有错误。

    【讨论】:

      猜你喜欢
      • 2016-09-05
      • 1970-01-01
      • 1970-01-01
      • 2015-08-07
      • 2013-08-01
      • 2018-12-19
      • 2014-07-22
      • 2014-05-09
      相关资源
      最近更新 更多