有沒有辦法檢查ActiveRecord的belongs_to
關聯是否存在,而不會產生數據庫查詢。檢查是否存在關聯,而不會導致數據庫命中
我正在使用example_association.present?
進行檢查,如果有關聯,它會導致關聯被加載。
所有我想知道的是,如果該關聯存在。
有沒有辦法檢查ActiveRecord的belongs_to
關聯是否存在,而不會產生數據庫查詢。檢查是否存在關聯,而不會導致數據庫命中
我正在使用example_association.present?
進行檢查,如果有關聯,它會導致關聯被加載。
所有我想知道的是,如果該關聯存在。
您可以使用reflect_on_all_associations
爲:
Foo.reflect_on_all_associations(:belongs_to).map(&:name).include?(:example_assoc)
哪裏:example_assoc
是belongs_to
協會之一。
或者,如果你有模型類的一個實例:
@foo.class.reflect_on_all_associations(:belongs_to).map(&:name).include?(:example_assoc)
如果你試圖儘量減少查詢的數量也許你應該考慮使用「包括」躍躍欲試負荷的關聯。
例如,
foos = Foo.includes(:example_associations).all
後來在一個循環或東西
,然後調用
foo.example_associations.present?
時,不應以任何額外的數據庫查詢
情況並非如此,因爲包含在Foo上生成左外連接,這意味着它將始終包含Foo,並返回nil:example_associations,如果Foo沒有。 – corvuszero
現在讀我明白什麼真正的問題了。我雖然問題是「如果有任何關聯的對象」。 – gernberg