Ruby on rails 销毁子记录会销毁父记录

Ruby on rails 销毁子记录会销毁父记录,ruby-on-rails,ajax,parent-child,destroy,Ruby On Rails,Ajax,Parent Child,Destroy,编辑:我解决了我的问题。我没有使用类型“DELETE”AJAX调用,而是使用类型“POST”调用,{:method:'DELETE'}作为其数据值。这似乎奏效了。 我试图通过AJAX请求删除Rails 4中的一个子元素,我遇到了这个问题。我有一个徽章模型,其中有许多徽章元素。BadgeElements控制器包含一个销毁方法,我知道该方法有效,因为在我的Show视图中,元素被正确删除。当我试图用AJAX在JavaScript文件中删除它们时,我遇到了麻烦。这是我的密码: function dele

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

我试图通过AJAX请求删除Rails 4中的一个子元素,我遇到了这个问题。我有一个徽章模型,其中有许多徽章元素。BadgeElements控制器包含一个销毁方法,我知道该方法有效,因为在我的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的Badge”等来确认这一点。以下是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

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

我刚刚遇到了这个问题

如果您的控制器有一个
重定向到
且对请求的格式不敏感,它将按照指示重定向到
徽章路径(徽章)
,但方法仍然是删除,从而删除父级和子级

我想你只需要像这样对块进行
响应

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

将模型
关联
销毁
徽章元素的动作
添加到您的任务中如果您确认,路径根为“badge/:id”,仅此而已?只需在js中输入console.log(path_root)。我有一种感觉,在你的道路上有一些额外的东西,比如#或。另外,如果您可以显示开发日志的尾部,看看它是否确实得到了对控制器的ajax调用,参数是什么,以及是否有任何参数errors@PavelS是的,我能。我肯定我找到了正确的道路。在我最后一次尝试时,我得到了/badges/7/badge_元素/493@emcanes我的开发日志显示从badges controller处理的对badges/7的删除请求。这显然是个问题,但我不知道为什么会这样,因为我的道路应该是正确的。
def destroy
  ...
  respond_to do |format| 
    format.html { redirect_to badge_path(badge) }
    format.js { }
  end
end