Rails do it适合您,您不需要判断是否已经使用了某个关联:
self.joins_values |= args
这里使用的是Array#|
法.它返回数组的并集,删除重复项:
ary = [1]
ary |= [1, 2]
ary |= [2, 3]
ary # => [1, 2, 3]
但是你可以用joins_values
或/和left_outer_joins_value
的方法来判断.这些方法返回关联数组(符号数组),工作方式如下:
MyModel.joins(:assoc).where(condition).joins_values
# => [:assoc]
MyModel.where(condition).joins_values
# => []
MyModel.left_joins(:assoc).where(condition).left_outer_joins_values
# => [:assoc]
MyModel.where(condition).left_outer_joins_values
# => []
还有includes_values
、eager_load_values
、preload_values
种方法:
MyModel.includes(:assoc).where(condition).includes_values
# => [:assoc]
MyModel.where(condition).includes_values
# => []
MyModel.eager_load(:assoc).where(condition).eager_load_values
# => [:assoc]
MyModel.where(condition).eager_load_values
# => []
MyModel.preload(:assoc).where(condition).preload_values
# => [:assoc]
MyModel.where(condition).preload_values
# => []