Rails'select'表单用于RESTful资源的Delete方法

时间:2016-07-11 15:28:51

标签: ruby-on-rails ruby

这似乎应该是一件简单的事情,但我无法找到一个说明性的例子。如果这个问题多余,请道歉。

所以我有一个rails应用程序,我正在尝试使用RESTful资源。这就是路线的样子:

配置/ routes.rb中

description

我想要一个简单的表单来删除这些以防万一添加额外的东西。所以这是我到目前为止的形式和控制器:

应用程序/视图/物品/ _delete.html.haml

resources :articles, only: [:index, :create, :destroy]

当我提交此内容时,我会收到'No route matches [DELETE]“/ articles”'。这是因为删除路由是articles /:id:

%h1 Delete Article
- all_articles = Article.all.sort.reverse.map { |a| [a.name, a.id] }
= form_for @article, method: :delete do |f|
  .form-group
    = f.select :id, options_for_select(all_articles), class: 'form-control'
  = f.submit 'Delete', class: 'btn btn-danger'

所以我的目标是让提交按钮获取id,并使用Delete方法发送到/ articles /:id。如果它有帮助,我就在Rails 4.1上。

我认为这里真正的痛点不是完全理解表单助手如何指向一个动作或传递数据。如果有人能够阐明,我会很感激。

我看到我可以在form_for方法上定义一个url,如下所示:

DELETE    /articles/:id(.:format)    articles#destroy

但是如何将表单中的id转换为该URL?

修改:相关:https://github.com/rails/rails/issues/1769

1 个答案:

答案 0 :(得分:2)

请尝试

= form_for @article, method: :delete, url: articles_path(@article) do |f|

url可以省略。你可以试试这个

= form_for @article, method: :delete do |f|

感谢@unused