在我的RoR项目中,我的delete方法不起作用。这很奇怪,因为一天前它还在工作,但现在它所做的一切都将我重定向到"朋友"页面。另一件需要注意的事情是,当删除朋友时,"你确定吗?"的弹出对话框也不会出现。我在网上读到一些解决方案,声明要放置"//= require jquery "和"//=需要jquery_ujs "在您的javascript文件,但所有我能找到的是我的manifest.js文件在我的" app/assets/config "目录。
任何帮助都将不胜感激。
- 索引. html. erb**
<% if user_signed_in? %>
<table class="table table-striped table-bordered table-hover">
<thead class="thead-dark">
<tr>
<th>Name</th>
<th>Email</th>
<th>Phone</th>
<th>Twitter</th>
<th>User ID</th>
<th></th>
</tr>
</thead>
<tbody>
<% @friends.each do |friend| %>
<% if friend.user == current_user %>
<tr>
<td>
<%= link_to friend.first_name + " " + friend.last_name, friend, style: 'text-decoration:none' %>
</td>
<td><%= friend.email %></td>
<td><%= friend.phone %></td>
<td><%= friend.twitter %></td>
<td><%= friend.user_id %></td>
<td>
<%= link_to 'delete',
friend,
:method => :delete,
:confirm => "are you sure?",
class: "btn btn-danger btn-sm" %>
</td>
</tr>
<% end %>
<% end %>
</tbody>
</table>
<br>
<% else %>
<h1>Welcome to the Friend App</h1>
<% end %>
- 清单. js**
//= link_tree ../images
//= link_tree ../builds
//= require jquery
//= require jquery_ujs
9条答案
按热度按时间vnjpjtjt1#
在Rails 7中,“旧的”指定delete方法的方法不起作用,我猜测是从rails-ujs到turbo的变化是罪魁祸首。
我是这样解决问题的:
路由:销毁用户会话删除/用户/注销(.:format)设备/会话#销毁
.html.企业资源管理系统:
html:(注意数据方法=“删除”)
错误:没有与[GET]“/users/sign_out”匹配的路由
用(solution source)求解
.html.企业资源管理系统:
.html:(注意数据加速方法=“删除”)
ybzsozfc2#
对于rails 7,如果您想让确认消息开箱即用,请注意:
q43xntqr3#
Rails 7使用Turbo和刺激框架来提高前端性能。
您需要安装turbo和stimulation。在您的终端上运行以下命令:
确保您使用的
turbo_method
如下:vx6bjr1n4#
您需要转到https://guides.rubyonrails.org/getting_started.html的第7.5节。
我们需要设置“销毁”链接的数据加速方法和数据加速确认HTML属性。
阅读整个第7.5节,包括两个示例中的销毁操作。还要在控制台中保存日志,并在单击“删除”按钮时观察错误。为了避免出现拍脑袋的情况,在销毁操作中,尝试按照rails guides
redirect_to whatever_path, status: :see_other
将status添加到redirect_to这也适用于删除对象并呈现新对象时,您需要设置status :unprocessable_entity
,这会导致服务器响应422。这里的关键是要确保您在Turbo的link_to中有
turbo_method: :delete
,然后,method: :delete
将GET更改为删除,最后,当您使用redirect_to时,您的destroy action
有一个状态,以避免在浏览器使用DELETE方法将您重定向到另一个位置时出错。v7pvogib5#
对于那些仍然有问题的人,这里有一些其他的步骤可以帮助:
Rails version: 7.0.3.1
参考:Rails 7: link_to method: :delete not working
遵循以下步骤:
importmap-rails
rails importmap:install
rails hotwire:install
下一个代码是有效的:
作为附加信息,使用:
gem hamlit
gem simple_form
fhg3lkii6#
您需要传递控制器的路径,而不仅仅是对象的路径。
您还需要为这个请求找到正确的路径,您可以执行以下操作来为朋友找到匹配的路由。
knpiaxh17#
我把我的应用程序升级到了Rails7,但是不想使用导入Map、turbo等,所以我想出了自己的Javascript解决方案,在销毁链接中添加了一个确认对话框。
首先,我把所有的链接都转换成
buttons
,这样触发delete
请求就容易多了:(Note Rails会自动将这些按钮 Package 在一个
form
标签中,并包含一个delete
方法。我发现为这些按钮设计样式出奇地容易。我只需要在CSS中更改一行代码。)这是我用来触发确认对话框的Javascript:
我已经在最新版本的Chrome,Safari和Firefox在Mac上测试过了,到目前为止还没有遇到任何问题。
这个解决方案的好处是它还支持多种语言,实际的确认消息将直接从
confirm
data属性中提取出来,因此您可以在那里放置任何想要的字符串或消息。cygmwpex8#
我也遇到了同样的问题,我很困惑。我尝试了所有的方法,但都失败了,日志总是显示页面渲染为HTML,而不是turbo流。然后我切换到Opera浏览器(从chrome),一切都按预期运行。有意义吗?
vuktfyat9#
也可以使用button_to代替link_to