RubyOnRails:计算连接的结果

时间:2014-07-07 09:36:16

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

(CROSSPOSTING注意:我几天前已在https://www.ruby-forum.com/topic/5048524发布了此问题而未收到回复。

使用RubyOnRails 4,使用Ruby 2:

我的模特中有:dicts,:cards和:成语。每个Dict都有很多卡片 每张卡都有很多成语。另外,:idioms有一个Integer列 :种类

我想知道,某个dict对象是否至少有 一张卡片至少有一个成语,其中:kind有一定的价值。

这是我的(工作)代码:

def has_kind?(dict,kind)
    Card.joins(:idioms).
        where("dict_id=#{dict.id} and cards.id=idioms.card_id and kind=#{kind}").
        count > 0
end

这样可行,但可以做得更好吗?我也试图省略至少一个 通过做类似的事情来进行id比较:

dict.cards.where("cards.id = ...").count > 0

但这不起作用(在这种情况下“计数”不适用)。

1 个答案:

答案 0 :(得分:2)

您至少可以通过关联来改进这一点,而不是明确地添加ID上的条件:

Class Dict < ActiveRecord::Base
  has_many :cards
  has_many :idioms,  through: :cards

  def has_kind?(kind)
    idioms.where(kind: kind).exists?
  end
end