销毁儿童记录会破坏父母

时间:2014-08-04 17:40:17

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

编辑:我解决了我的问题。而不是类型' DELETE'在AJAX电话中,我使用的是' POST'使用{:method:' DELETE'}作为其数据值进行调用。这似乎可以解决问题。

我试图允许通过AJAX请求删除Rails 4中的子元素,并且我遇到了这个问题。我有一个徽章模型,它有许多BadgeElements。 BadgeElements控制器包含一个我知道可行的destroy方法,因为在我的Show视图中,元素被正确删除。当我尝试使用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错误,这告诉我徽章本身正在被删除。我可以通过重新加载页面并获得错误来确认这一点"找不到带有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
logo_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

有谁知道发生了什么?谢谢。

1 个答案:

答案 0 :(得分: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