0

我有3種型號:獲得通過相關的ActiveRecord刪除的對象與對象偏執

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

我找到了答案,但是,我不滿意它。

它爲了得到相關聯的是軟刪除的對象,我要修改Offer模型像這樣和unscope關係:

class Offer < ActiveRecord::Base 
    belongs_to :cruise, inverse_of: :offers 
    has_many :requests 

    def travel 
    Travel.unscoped { super } 
    end 
end 

在我的情況下,這個工作,但打破了一些功能,因爲我需要unscope只有在這種情況下才會有關係,而其他情況不變。這將是不錯的東西像request.offers.travel(:unscoped)

在我來說,最好的解決辦法是簡單地分別訪問該對象就像Travel.with_deleted.find(@offer.travel_id)

0

On Rails的> 4.你可以使用unscope方法去除偏執範圍。

class Request < ActiveRecord::Base 
    acts_as_paranoid 
    belongs_to :offer, -> { unscope(where: :deleted_at) } 
end 
相關問題