为什么 delete_model_path 的标准助手不存在?
Why doesn't standard helper for delete_model_path exist?
例如,如果我有一个模型 Item
,并且我为它定义了足智多谋的路线,我必须手动将 :delete
动作作为成员,这是为什么?
示例:
# .../config/routes.rb
resources :items do
member { get :delete }
end
我需要 :delete
操作来向用户显示确认对话框。有没有更好的方法来完成我想做的事情?还是我做得对,这是最佳做法?
删除对象的标准操作称为destroy
,是resources :items
定义的七种路由之一。
您可以在示例中使用 link_to "Delete", item_path(@item), method: :delete
调用它。
切勿使用 GET 请求执行破坏性操作。
通常情况下,您使用不显眼的 js 显示确认对话框。像这样
<%= link_to 'Destroy', item_path(@item), method: :delete, data: {confirm: 'Are you sure?'} %>
这将生成一段 JS,拦截点击 link 并显示确认模式。如果您选择继续,它将发送表格。
是的,不要通过 GET 请求执行此类危险操作(除非您有正当理由)
I must include :delete action as a member by hand
不,你不需要。
查找 Rails' guide on resourceful routing 了解更多信息:
如其他答案中所述,您必须使用以下命令调用 destroy
路径助手:
<%= link_to "Destroy", items_destroy_path(@item), method: :delete %>
您还需要将 Rails UJS
附加到您的 JS 才能使其正常工作。
这是因为默认情况下您应该使用客户端 JS 显示确认对话框,如@SergioTulentsev 所述。 "delete confirmation" 有一个单独的页面并不常见,因此不是默认设置。
是的,您可能已经注意到某些操作的模式:new
是 create
的 "interfacing stub",正如 edit
是 update
, 他们默认不做任何事情,他们只向您发送界面以进行实际操作。
但是,操作本身是使用适当的 HTTP 动词(POST
、DELETE
等)发布到资源路径,这几乎是每个人的建议。但是,重要的是要知道 links 只能做 GET
(表单可以做其余的事情)。要制作 link 问题 DELETE
,您必须使用 Rails' 帮助程序用 JavaScript 扩充它。大家都是这么建议的。如果 JavaScript 结果被禁用(如果你关心人类用户比例低得离谱),这将不起作用。
您将要执行的操作与 destroy
相同 "interfacing stub"。您可以将其命名为 delete
并相应地命名路由。 只是不常见,仅此而已。
不过,如果它 对您来说很常见,请考虑创建一个 路由关注点,甚至是您自己的助手。我已经看到在几乎没有用户界面的 API 中需要这样的东西,因此不需要来自默认助手的 new
或 edit
。
例如,如果我有一个模型 Item
,并且我为它定义了足智多谋的路线,我必须手动将 :delete
动作作为成员,这是为什么?
示例:
# .../config/routes.rb
resources :items do
member { get :delete }
end
我需要 :delete
操作来向用户显示确认对话框。有没有更好的方法来完成我想做的事情?还是我做得对,这是最佳做法?
删除对象的标准操作称为destroy
,是resources :items
定义的七种路由之一。
您可以在示例中使用 link_to "Delete", item_path(@item), method: :delete
调用它。
切勿使用 GET 请求执行破坏性操作。
通常情况下,您使用不显眼的 js 显示确认对话框。像这样
<%= link_to 'Destroy', item_path(@item), method: :delete, data: {confirm: 'Are you sure?'} %>
这将生成一段 JS,拦截点击 link 并显示确认模式。如果您选择继续,它将发送表格。
是的,不要通过 GET 请求执行此类危险操作(除非您有正当理由)
I must include :delete action as a member by hand
不,你不需要。
查找 Rails' guide on resourceful routing 了解更多信息:
如其他答案中所述,您必须使用以下命令调用 destroy
路径助手:
<%= link_to "Destroy", items_destroy_path(@item), method: :delete %>
您还需要将 Rails UJS
附加到您的 JS 才能使其正常工作。
这是因为默认情况下您应该使用客户端 JS 显示确认对话框,如@SergioTulentsev 所述。 "delete confirmation" 有一个单独的页面并不常见,因此不是默认设置。
是的,您可能已经注意到某些操作的模式:new
是 create
的 "interfacing stub",正如 edit
是 update
, 他们默认不做任何事情,他们只向您发送界面以进行实际操作。
但是,操作本身是使用适当的 HTTP 动词(POST
、DELETE
等)发布到资源路径,这几乎是每个人的建议。但是,重要的是要知道 links 只能做 GET
(表单可以做其余的事情)。要制作 link 问题 DELETE
,您必须使用 Rails' 帮助程序用 JavaScript 扩充它。大家都是这么建议的。如果 JavaScript 结果被禁用(如果你关心人类用户比例低得离谱),这将不起作用。
您将要执行的操作与 destroy
相同 "interfacing stub"。您可以将其命名为 delete
并相应地命名路由。 只是不常见,仅此而已。
不过,如果它 对您来说很常见,请考虑创建一个 路由关注点,甚至是您自己的助手。我已经看到在几乎没有用户界面的 API 中需要这样的东西,因此不需要来自默认助手的 new
或 edit
。