1

在我的视图文件中,我有

%td= link_to 'Destroy', fund_subfund_path(@fund, subfund), :method => :delete, :data => { :confirm => '你确定吗?' }

我的控制器有

def destroy
  @subfund = Subfund.find(params[:id])
  fund_id = @subfund.fund_id
  nickname = @subfund.nickname
  if @loans.empty?
    @subfund.destroy
    respond_to do |format|
      format.html { redirect_to fund_path(fund_id), notice: 'Subfund ' + nickname + ' was destroyed.' }
      format.json { head :no_content }
    end
  else
    respond_to do |format|
      format.html { redirect_to fund_path(fund_id), 
        notice: 'Subfund ' + nickname + " has Loans, so can't be destroyed." }
      format.json { head :no_content }
    end
  end
end

重定向和消息工作正常。我的问题是,即使 @loans 不为空且未执行 @subfund.destroy 操作,“您确定吗?” 确认仍然出现。

如何在确认消息之前拦截此方法?

我确实尝试过 link_to_if 作为替代方案,但仍然将“Destroy”显示为非活动链接,我认为这会让用户感到困惑。

4

1 回答 1

2

Baylor Rae's 是一个很好的答案,特别是它会实时检查是否有任何贷款。

您也可以考虑一个更简单的替代方案:当您呈现删除链接到所在的页面时,您可以根据是否有贷款放置或不放置删除按钮。

我也不会说 HAML,但我很确定在声明中包含您的 %td= link_to 很简单if ... else ... end

如果不应该呈现按钮,您可以编写文本来解释用户无法删除该对象的原因。这样用户就很容易了解情况,而不必单击删除链接来发现您无法执行该操作。

干杯,

于 2013-04-19T23:36:07.520 回答