RoR技术问题:能否用单条查询判断对象类型及关联?
可以简化,两种方案供你参考
方案1:数据库层面合并查询(推荐)
直接通过FruitBasket模型发起查询,同时完成类型验证和关联条件检查,完全不需要&&运算符:
if FruitBasket.where(id: basket.id).joins(things: :fruit).exists?(fruit: { type: Apple.name }) # 执行操作 end
原理:如果basket不是FruitBasket实例,FruitBasket.where(id: basket.id)会返回空集合,exists?自然返回false;只有当basket属于FruitBasket且关联的水果是Apple时,才会返回true。
方案2:Ruby层面简化表达式
如果不想额外发起数据库查询(比如basket已经在内存中),可以用Ruby条件表达式替代&&:
if basket.is_a?(FruitBasket) then basket.things.joins(:fruit).exists?(fruit: { type: Apple.name }) else false end
这种方式本质还是两次判断,只是没有显式写&&,方案1更贴合你"单条查询"的需求。
内容的提问来源于stack exchange,提问作者emmie
相关产品推荐
相关产品推荐

