首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Array Rails ActiveRecord中无异常选择where ID

如何在Array Rails ActiveRecord中无异常选择where ID
EN

Stack Overflow用户
提问于 2009-09-17 23:12:06
回答 4查看 143.5K关注 0票数 152

当我有ids数组时,比如

ids = [2,3,5]

我表演的是

Comment.find(ids)

一切都很好。但是当存在不存在的id时,我会得到一个异常。这通常发生在我获得与某个过滤器相匹配的I列表时,然后我执行如下操作

current_user.comments.find(ids)

这一次我可能有一个有效的评论ID,但是它不属于给定的用户,所以没有找到它,我得到了一个异常。

我尝试过find(:all, ids),但它会返回所有记录。

我现在唯一能做的就是

current_user.comments.select { |c| ids.include?(c.id) }

但在我看来,这似乎是一个非常低效的解决方案。

有没有更好的方法来选择数组中的ID,而不会在不存在的记录上得到异常?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-09-17 23:22:19

如果只是为了避免您所担心的异常,那么"find_all_by..“函数族在不抛出异常的情况下工作。

Comment.find_all_by_id([2, 3, 5])

即使某些if不存在也能正常工作。这在

user.comments.find_all_by_id(potentially_nonexistent_ids)

情况也是如此。

更新: Rails 4

Comment.where(id: [2, 3, 5])
票数 239
EN

Stack Overflow用户

发布于 2014-09-25 19:42:00

如果您需要更多的控制(也许您需要声明表名),您还可以执行以下操作:

Model.joins(:another_model_table_name)
  .where('another_model_table_name.id IN (?)', your_id_array)
票数 24
EN

Stack Overflow用户

发布于 2014-06-12 07:11:31

现在在rails 4中不推荐使用.find和.find_by_id方法,所以我们可以使用下面的方法:

Comment.where(id: [2, 3, 5])

即使某些It不存在,它也会正常工作。这在

user.comments.where(id: avoided_ids_array)

也用于排除ID

Comment.where.not(id: [2, 3, 5])
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1441791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档