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

时间:2015-06-14 03:47:16

标签: ruby-on-rails ruby activerecord rails-activerecord

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

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

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

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

2 个答案:

答案 0 :(得分:3)

您的代码:

false

始终返回Cpu,因为在这里您要检查socket的模型实例Socket属性是否包含在对应于Cooler模型实例的数组中.exists?模型实例,这种情况永远不会发生。

但是,您可以使用@cooler.sockets.exists?(socket: @cpu.socket) 完成所需内容:

.present?

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

// controller work.js
import Ember from "ember";
export default Ember.Controller.extend({
  firstElement: function () {
    return this.get('model').get('firstObject'); // or this.get('model.firstObject'); 
  }.property('model.[]')
});

答案 1 :(得分:3)

@suslov解释并提供了几种方法来解决您的要求。以下是我能想到的一种方式:

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

阅读any?方法。