当我有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,而不会在不存在的记录上得到异常?
发布于 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])
发布于 2014-09-25 19:42:00
如果您需要更多的控制(也许您需要声明表名),您还可以执行以下操作:
Model.joins(:another_model_table_name)
.where('another_model_table_name.id IN (?)', your_id_array)
发布于 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])
https://stackoverflow.com/questions/1441791
复制相似问题