2015-10-14 66 views
0

我通过控制器试图delete从数据库中的记录如下:HTTParty压倒一切的天然红宝石删除轨道

Model.where("property_1 = ? OR property_2 = ?", value_1, value_2).first.destroy 

而且我有一个Rspec的测试为它如下:

it "should do stuff" do 
    expect{ post :create, @model_instance }.to change{ Model.count }.by -1 
end 

而且通过。

但是,当我改变我的代码来代替destroy使用delete如下:

Model.where("property_1 = ? OR property_2 = ?", value_1, value_2).first.delete 

测试失败,出现以下错误:

ArgumentError: bad argument (expected URI object or URI string) 

在仔细检查,原来我在我的模型类(include HTTParty)中包含了HTTParty,它有一个删除方法,即覆盖原生的:

def delete 
    self.class.delete(id) if persisted? 
    @destroyed = true 
    freeze 
end 

所以,我的问题是:是否使用HTTParty意味着我将不能再使用原生delete方法?知道delete将删除记录而不会触发任何回调,因为destroy会。 (我不会想用destroy,然后手动skip_callbacksdelete能为我做到这一点)提前

感谢响应

+0

是, “应该做的东西” 测试是否正确?它不应该开始'expect {delete:delete,@model_instance}' – ReggieB

+0

@ReggieB感谢您的观察,并且是的它是正确的。我正在执行'before_action'中的另一个资源的'create'方法的删除。 –

回答

0

你需要别名删除方法,你包括HTTParty之前。喜欢的东西:

alias_method :model_delete, :delete 
include HTTParty 

然后:

model.delete # calls HTTParty's delete instance method 
model.model_delete # call ActiveRecord delete instance method