我有3个型号:
class Request < ActiveRecord::Base
acts_as_paranoid
belongs_to :offer
end
class Offer < ActiveRecord::Base
belongs_to :cruise, inverse_of: :offers
has_many :requests
end
class Travel < ActiveRecord::Base
acts_as_paranoid
has_many :offers, inverse_of: :travel
end
通常我可以通过链接访问Travel
对象:request.offer.travel
。
但是,如果我需要的Travel
对象被paranoia
删除 - 我无法通过此类对象链访问它。
Travel.with_deleted.find(some_id_of_deleted_travel)
效果很好,但request.offers.travel.with_deleted
,同一个对象,却让我undefined method 'with_deleted' for nil:NilClass
。
如何通过关系访问已删除的对象?
答案 0 :(得分:1)
On Rails&gt;你可以使用unscope方法去除偏执范围。
class Request < ActiveRecord::Base
acts_as_paranoid
belongs_to :offer, -> { unscope(where: :deleted_at) }
end
答案 1 :(得分:0)
我找到了答案,然而,我对此并不满意。
为了获得被软删除的关联对象,我必须像这样修改Offer
模型并取消关联:
class Offer < ActiveRecord::Base
belongs_to :cruise, inverse_of: :offers
has_many :requests
def travel
Travel.unscoped { super }
end
end
在我的情况下,这有效,但打破了一些功能,因为我只需要在这种情况下取消关系,保持其他情况不变。像request.offers.travel(:unscoped)
等
在我的情况下,最佳解决方案是单独访问此对象,如Travel.with_deleted.find(@offer.travel_id)