【问题标题】:removing a document by passing its id using form_tag通过使用 form_tag 传递其 id 来删除文档
【发布时间】:2013-08-12 06:43:51
【问题描述】:

假设我有书籍模型,book.rb

class Book
  include Mongoid::Document
  field :book_id, type: String
  field :title, type: String
end

(这里我使用的是 mongoid,但我认为对于这个问题,什么类型的数据并不重要。)

book 模型有自己的控制器、视图等。

现在,我想创建一个带有 form_tag 的页面(如果这不是正确的方法,请告诉我),通过输入书籍的 id 并单击 enter,我将能够从数据库中删除这个给定 id 的记录.

删除.html.erb:

<%= form_tag books_path, :method => 'get' do %>
<p>book_id:
    <%= text_field_tag :book_id, params[:book_id] %>
    <%= submit_tag "Remove", :name => nil, :confirm => "Are you sure?" %>
</p>
<% end %>

我知道如何删除给定的文档,但不知道如何传递表单中输入的值以及将删除文档的逻辑放在哪里。

【问题讨论】:

  • 永远不要使用 GET 请求来删除东西:/
  • @sevenseacat 感谢您的建议。

标签: ruby ruby-on-rails-4


【解决方案1】:

首先要做的事情。为什么您需要为您的 Book 模型存储 book_id ? Mongoid 已经为此提供了一个_id 字段。

销毁资源的常用方法是通过发出 DELETE HTTP 请求在控制器中执行销毁操作。

class BooksController
  def destroy
    Book.find(params[:id]).destroy
    redirect_to :back
  end
end

然后只需使用以下链接做一个链接:

link_to "Delete", book_path(@book), method: :delete

@book 是您的图书实例。

【讨论】:

  • 谢谢。我知道 mongodb 中的“_id”字段。这只是这里给出的一个例子。但是,如果我想做其他操作而不是简单地删除怎么办。控制器仍然是放置此类逻辑的最佳位置吗?
  • 根据你的需要,你应该遵循“瘦控制器,胖模型”的导轨原则。控制器应该只负责渲染和调用您的实例方法。将您的逻辑放入模型中。
  • 您显示的一行代码,我应该将其添加到我的 remove.html.erb 代码中吗?如果我误解了,请您将其与我的代码一起显示吗?
  • 是的,link_to 应该转到您的观点之一。通常,您希望循环访问您可能拥有的每个 @books,并显示您的图书详细信息和操作(例如,编辑、删除)。
  • 如果您真的想使用form_tag 执行销毁操作,只需执行此操作form_tag book_path(@book), method: :delete
猜你喜欢
  • 2020-05-12
  • 2018-10-07
  • 1970-01-01
  • 2018-06-14
  • 2021-05-27
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多