Ruby on rails HTTParty超越ruby on rails中的本机删除
我正试图通过控制器Ruby on rails HTTParty超越ruby on rails中的本机删除,ruby-on-rails,ruby,activerecord,httparty,Ruby On Rails,Ruby,Activerecord,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 Model.where("proper
从数据库中删除一条记录,如下所示:
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
Model.where("property_1 = ? OR property_2 = ?", value_1, value_2).first.delete
这就过去了
但是,当我将代码更改为使用delete
代替destroy
时,如下所示:
it "should do stuff" do
expect{ post :create, @model_instance }.to change{ Model.count }.by -1
end
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
,该类的delete方法优于本机方法:
def delete
self.class.delete(id) if persisted?
@destroyed = true
freeze
end
所以,我的问题是:使用HTTParty
是否意味着我将无法再次使用本机delete
方法?知道delete
会像destroy
那样删除记录而不触发任何回调。(我不想使用destroy
然后手动skip_callbacks
当delete
可以为我这样做时)
提前感谢您的回复在包含HTTParty之前,您需要为delete方法添加别名。比如:
alias_method :model_delete, :delete
include HTTParty
然后:
“应该做些什么”测试正确吗?它不应该启动expect{delete:delete,@model_instance}
@ReggieB感谢您的观察,是的,它是正确的。我正在为另一个资源的create
方法在before_action
中执行删除操作。