(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
但这不起作用(在这种情况下“计数”不适用)。
答案 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