【问题标题】:Destroying child record destroys parent销毁子记录会破坏父记录
【发布时间】:2015-02-06 10:00:14
【问题描述】:

编辑:我解决了我的问题。我没有使用“DELETE”类型的 AJAX 调用,而是使用了“POST”类型的调用,其中 {:method: 'DELETE'} 作为其数据值。这似乎可以解决问题。

我试图允许通过 AJAX 请求删除 Rails 4 中的子元素,但我遇到了这个问题。我有一个带有许多 BadgeElements 的 Badge 模型。 BadgeElements 控制器包含一个我知道有效的销毁方法,因为在我的显示视图中,元素被正确删除。当我尝试使用 AJAX 在我的 JavaScript 文件中删除它们时,我遇到了麻烦。这是我的代码:

function deleteElement(id) {
  var path_root = $('form').attr('action');
  var delete_path = path_root + "/badge_elements/" + id;
  $.ajax({
    url: delete_path, 
    type: 'DELETE' 
  });
  $('form').load(path_root + "/edit form");
}

delete_path 属性的计算结果为 /badges/[badge_id]/badge_elements/[id],其中 [id] 是相关特定元素的 id。执行此函数时,我在以 /badges 结尾的路径处收到 400 错误,这告诉我徽章本身正在被删除。我可以通过重新加载页面并收到错误“Could not find Badge with badge_id = 4”等来确认这一点。作为参考,这是 BadgeElement 的模型和销毁方法:

badge_element.rb:

class BadgeElement < ActiveRecord::Base
  belongs_to :badge
  belongs_to :font
  scope :front, -> {where(side:"front")}
  scope :back, -> {where(side:"back")}
  validates :font_id, presence: true
end

在 badge_elements_controller.rb 中:

def destroy
  badge = Badge.find(params[:badge_id])
  badge_element = BadgeElement.find(params[:id])
  badge_element.destroy
  redirect_to badge_path(badge)
end

有人知道发生了什么吗?谢谢。

【问题讨论】:

  • 将badge_elements 的模型associations 和destroy 操作添加到您的问题
  • 您能确认一下,path_root 是“badge/:id”,仅此而已?只需在您的 js 中使用 console.log(path_root)。我感觉你的 path_root 中有一些额外的东西,比如 # 或 ? .
  • 此外,如果您可以显示开发日志的尾部,以查看它是否确实收到了对控制器的 ajax 调用、参数是什么以及是否有任何错误
  • @PavelS 是的,我可以。我确定我走的是正确的道路。在我最后一次尝试中,我得到了 /badges/7/badge_elements/493
  • @emcanes 我的开发日志显示了一个从 Badges 控制器处理的对 badges/7 的 DELETE 请求。这显然是问题所在,但我不知道为什么会这样,因为我的路径应该是正确的。

标签: ruby-on-rails ajax parent-child destroy


【解决方案1】:

我刚遇到这个问题。

如果您的控制器有一个redirect_to 并且对请求的格式不敏感,它将按照指示重定向到badge_path(badge),但该方法仍将是DELETE,从而也删除父级作为孩子。

我认为你只需要像这样的respond_to 块

def destroy
  ...
  respond_to do |format| 
    format.html { redirect_to badge_path(badge) }
    format.js { }
  end
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多