编辑:我解决了我的问题。而不是类型' 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
有谁知道发生了什么?谢谢。
答案 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