1

我正在尝试将 bootstrap-confirmation 用于带有数据表的索引视图和用于删除行项目的列。我让它在没有确认的情况下工作,或者使用默认确认,但没有使用 bootstrap-confirmation,它会将我发送到 show 方法,而不是控制器的 delete 方法。就像它没有看到方法一样::删除

这是我在索引视图中调用它的方式。弹出确认显示,但是当我单击确定时,它会将我发送到显示页面。

<td><%= link_to '<i class="fa fa-trash-o fa-lg"></i>'.html_safe, role_path(id: role.id), method: :delete, :'data-toggle' => 'confirmation', :'data-copy-Attributes' => 'href data-method'%></td>

以下工作(未经确认),所以我知道我的路线、控制器操作等工作。

<td><%= link_to '<i class="fa fa-trash-o fa-lg"></i>'.html_safe, role_path(id: role.id), method: :delete, %></td>

有任何想法吗?

以下是我的观点:

<h1> Roles</h1>
</br>

<table width="100%" class="table table-striped table-bordered table-hover" id="roles-table">
  <thead>
    <tr>
      <th>Roles</th>
      <th>User Count</th>
      <th>Delete Role</th>
    </tr>
  </thead>
  <tbody>
    <% @roles.each do |role| %>
    <tr>
      <td><%= role.name %>
      <td><%= role.users.count %></td>
      <% if (role.users.count == 0) %>
        <!--td><%= link_to '<i class="fa fa-trash-o fa-lg"></i>'.html_safe, role_path(id: role.id), method: :delete, :data => {:confirm => 'Are you sure?'}%></td-->
        <td><%= link_to '<i class="fa fa-trash-o fa-lg"></i>'.html_safe, role_path(id: role.id), method: :delete, :'data-toggle' => 'confirmation', :'data-copy-Attributes' => 'href data-method'%></td>

      <% else %><
        <td></td>
      <% end %>
    </tr>
    <% end %>
  </tbody>
</table>
<br>
<%= link_to "Add Role", new_role_path, class: "btn btn-success"%>
4

1 回答 1

0

我无法使该库工作,因为它没有提供编辑它生成的弹出 html 的方法,因此,它也为我提供了该show方法的链接,并且无法删除它。

所以我所做的是创建一个路由来删除期望id从资源接收的资源和参数中的值delete

get 'role/:id/:delete', to: 'role#show', as: 'show_role'

然后在您的控制器中,您可以检查您是否正在接收delete参数,以便在 and 之间进行分隔showdestroy如果您收到它,则将其销毁并重定向到roles_url

def show
  @role = Role.find(params[:id])
  if params[:delete]
    @role.destroy
    redirect_to roles_url
  end
end

然后在您的视图中,您可以使用link_to帮助器,传递先前创建的路由,传递资源和delete参数值,添加引导确认所需的数据属性以使其工作:

<%= link_to 'Destroy', show_role_path(role, delete: true), data: { toggle: 'confirmation', title: 'Delete it?' } %>
于 2017-05-31T20:43:06.620 回答