【问题标题】:Rails 'select' form for Delete method of RESTful resourceRails 'select' 表单用于 RESTful 资源的 Delete 方法
【发布时间】:2016-07-11 15:28:50
【问题描述】:

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

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

config/routes.rb

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

我想要一个简单的表单来删除这些,以防添加额外内容或其他任何内容。所以这是我到目前为止的表单和控制器:

app/views/articles/_delete.html.haml

%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'

当我提交此内容时,我收到“没有路线匹配 [DELETE] "/articles"”。这是因为删除的路径是articles/:id:

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

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

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

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

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

但是我怎样才能将表单中的 id 获取到该 url 中呢?

编辑:相关:https://github.com/rails/rails/issues/1769

【问题讨论】:

  • 您不应该在视图文件中写入数据库调用。您可以创建对象@articles = Article.all.sort.reverse.map { |a| [a.name, a.id] } 并在视图文件中使用它。
  • 好点,会的。

标签: ruby-on-rails ruby


【解决方案1】:

请尝试

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

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

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

感谢@unused

【讨论】:

  • 没错,路线是针对单一资源的。我假设您可以省略网址。
  • @article 是否需要提前定义?我正在尝试这个,但它仍在尝试路由到 /articles。
  • 它与您正在制作的@article 相同form_for
  • 感谢@unused 指出这一点并且非常有用。 ;)
  • 所以省略了 url 的版本,这不就是我一开始的样子吗?知道为什么我会路由到错误的地方吗?
猜你喜欢
  • 2013-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-29
  • 2017-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多