我正在使用旧版Rails应用程序,该应用程序已经在每个主要版本的Rails中进行了认真的升级,而我们目前正在使用Rails 5.1,因此我无法获得before_destroy
来防止删除操作失败验证
我一直在阅读return false
已被弃用,我们都应该使用throw :abort
,但是都没有用。我没有收到任何错误,尽管throw
user.rb:
class User < ApplicationRecord
has_many :permission_users
has_many :permissions, through: :permission_users, dependent: :destroy
end
加入模型Permission_user.rb:
class PermissionUser < ApplicationRecord
belongs_to :user
belongs_to :permission
before_destroy :check_before_removing!
private
def check_before_removing!
if not_valid? # condition isn't important
errors.add :base, exception.message
throw(:abort)
end
end
end
我的规格:
specify "cannot have their admin permissions revoked" do
expect {
admin.permissions.delete admin_permission
}.to change { admin.permissions.count }.by(0)
end
# => expected `admin.permissions.count` to have changed by 0, but was changed by -1
答案 0 :(得分:1)
before_destroy回调应该放在相关对象之前::destroy 关联(或使用prepend:true选项),以确保它们执行 在通过依赖项删除记录之前::destroy。
所以请尝试
before_destroy :check_before_removing!, prepend: true
答案 1 :(得分:1)
尝试做这样的事情
from elasticsearch import Elasticsearch
client = Elasticsearch()
indexName = "medical"
docType = "diseases"
searchFrom = 0
searchSize = 3
searchBody = {
"fields": ["name"],
"query": {
"simple_query_string": {
"query": '+fatigue+fever+"joint pain"',
"fields": ["fulltext", "title^5", "name^10"]
}
}
}
client.search(
index=indexName,
doc_type=docType,
body=searchBody,
from_=searchFrom,
size=searchSize
)
before_destroy :check_before_removing, prepend: true