检查一个项目是否在另一个模型的“has_many”字段中的最简单方法?

easiest way to check if an item is in `has_many` field of another model?

我有 3 个表,coolercpusocket。一个cooler(支持/)has_manysocketscpubelongs_tosocket。现在我检查 cooler 是否支持 cpu 的最简单方法是什么?

@cooler.sockets.include? @cpu.socket # => False always no matter what

我尝试使用以下方法检查类型:

@cooler.sockets.class
#=> #Socket::ActiveRecord_Associations_CollectionProxy

您的代码:

@cooler.sockets.include? @cpu.socket

总是returnsfalse,因为这里你试图检查Cpu的模型实例socket属性是否包含在[=16=的数组中] 模型实例对应于 Cooler 模型实例,这永远不可能发生。

但是,您可以通过 .exists?:

完成您想要的
@cooler.sockets.exists?(socket: @cpu.socket)

.present?:

@cooler.sockets.where(socket: @cpu.socket).present?

解释并提供了几种方法来解决您的需求。这是我能想到的一种方法:

@cooler.sockets.where(socket: @cpu.socket).any?

阅读any?方法。