3

在我的 RoR 项目中,我的删除方法不起作用。这很奇怪,因为它一天前还在工作,但现在它所做的一切都将我重定向到“朋友”页面。还有一点需要注意的是,弹出的对话框“你确定吗?” 删除之前工作的朋友时也不会出现。我在网上阅读了一些解决方案,说明将“//= 要求 jquery”和“//= 要求 jquery_ujs”放在您的 javascript 文件中,但我能找到的只是我的“app/assets/config”目录中的 manifest.js 文件。

任何帮助将不胜感激。

index.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 %>

manifest.js

//= link_tree ../images
//= link_tree ../builds
//= require jquery
//= require jquery_ujs
4

4 回答 4

3

在 Rails 7 中,指定删除方法的“旧”方式不起作用。我的猜测是从 rails-ujs 到 turbo 的变化是罪魁祸首。Rails-ujs 在 5.1 版本中被移入 RailsHotwire Turbo在 rails 7 中替换了它。

这就是我解决问题的方法:

路线:destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy

.html.erb:

<%= link_to t('navigation.sign_out'), destroy_user_session_path, method: :delete, class: "btn btn-danger ml-3" %>

html: (注意 data-method="delete")

<a class="btn btn-danger ml-3" rel="nofollow" data-method="delete" href="/users/sign_out"><span class="translation_missing" title="translation missing: en.navigation.sign_out">Sign Out</span></a>

错误:没有路由匹配 [GET] "/users/sign_out"

用(解决方案来源)解决了它

.html.erb:

<%= link_to t('navigation.sign_out'), destroy_user_session_path, data: { "turbo-method": :delete }, class: "btn btn-danger ml-3" %>

.html: (注意 data-turbo-method="delete")

<a data-turbo-method="delete" class="btn btn-danger ml-3" href="/users/sign_out"><span class="translation_missing" title="translation missing: en.navigation.sign_out">Sign Out</span></a>
于 2021-12-31T05:59:11.417 回答
1

如果您希望确认消息在 rails 7 开箱即用,请快速说明:

<%= link_to t('navigation.sign_out'),
  destroy_user_session_path,
  data: { turbo_method: :delete, turbo_confirm: 'Are you sure?' },
  class: "btn btn-danger ml-3" %>
于 2022-02-04T15:07:39.357 回答
0

您需要传递控制器的路径,而不仅仅是对象。

<%= link_to 'delete', 
          friend_path(friend),
          :method => :delete,
          :confirm => "are you sure?", 
          class: "btn btn-danger btn-sm" %>

您还需要为此请求找到正确的路径,您可以执行以下操作来为朋友找到匹配的路由。

rails routes | grep friend
于 2021-12-22T14:35:33.503 回答
0

您也可以使用 button_to 代替 link_to

<%= button_to friend_path(friend), method: :delete do %>
  Delete
<% end %>
于 2022-01-09T18:53:28.657 回答