2015-10-14 65 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