当我有一组ID时,比如

ids = [2,3,5]

我表演

Comment.find(ids)

一切正常.但当id不存在时,我会得到一个例外.这种情况通常发生在我得到与某个过滤器匹配的ID列表时,然后我执行以下操作

current_user.comments.find(ids)

这次我可能有一个有效的 comments ID,但它不属于给定的用户,因此找不到它,我得到一个异常.

我试了find(:all, ids)次,但它返回了所有记录.

我现在唯一能做的就是

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

但在我看来,这似乎是超低效的解决方案.

有没有更好的方法可以在不存在异常记录的情况下 Select ID in Array

推荐答案

如果只是为了避免你所担心的例外情况,那么"find_all_by…"函数族的工作没有抛出异常.

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

即使某些ID不存在也能工作.这种方法适用于

user.comments.find_all_by_id(potentially_nonexistent_ids)

案件也是如此.

更新:Rails 4

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

Ruby-on-rails相关问答推荐

GO AES GCM加密在解密时出错&S

DateTime的最小数据提交格式

使用ActiveSupport::TimeWithZone将UTC转换为用户定义的时区

Ruby on Rails 更新触发了 Mailer 函数中的 ArgumentError

计算总价(商品数量*商品价格)

无效的单表继承类型:Rails

使用brew 软件安装了 elasticsearch,但找不到配置文件

rails select标签,预先 Select 了多个值

如何为 Rails SimpleForm Select 框设置默认 Select 值

如何将 Ruby 哈希转换为 XML?

默认情况下,如何在 Rails 中使 cookie 安全(仅限 https)?

RSpec > 有没有办法用一个命令运行所有测试?

删除链接在 Rails 3 视图中发送Get而不是Delete

如何编写 Capybara 断言来判断按钮的存在及其启用或禁用状态?

在 Rails 中复制模型实例

通过 Ruby 或 Rails 的 LDAP

rails 获取应用程序根/基本 url

如何在两个字段上对 ruby​​/rails 进行排序?

如何强制 RSpec 测试失败?

Ruby 更新后:测试失败,assets资源 未声明为在生产中预编译