1

背景信息:
模型:App 和公告
关联:app has_many 公告

情况:我的 AnnouncementsController 中有一个非常简单的索引操作

def index
  app = App.find(params[:app_id])
  @announcements = app.announcements
end

我正在使用 jbuilder gem 来输出 json,它表明我的 @announcements 数组是空的,但我确定其中有记录。我检查了来源,发现它使用了“空?” 在继续之前检查集合是否为空的方法。我想看看什么'空?方法返回,所以我在索引操作中添加了一行:

def index
  app = App.find(params[:app_id])
  @announcements = app.announcements
  puts @announcements.empty?.to_s # Returns: "true"
end

“真”不是我所期待的,因为我确定我有数据。所以我添加了一个“检查”调用来检查@announcement 变量中的内容:

def index
  app = App.find(params[:app_id])
  @announcements = app.announcements
  puts @announcements.inspect # Returns: "[#<Announcement id: 1, app_id: 1, title: \"20% off everything!\", content: \"Enjoy 20% off everything from now until yesterday!!...\", image: \"0e06b94d-1ac6-4d90-b937-9fa7bfaf90c9.jpg\", status: 0, created_at: \"2012-08-27 15:33:00\", updated_at: \"2012-08-27 15:33:00\">]"
  puts @announcements.empty?.to_s # Returns: "false"
end

嗯……有趣。因此,除了向我的变量“空”添加“检查”之外,无需进行任何更改。方法返回了不同的结果。

我所做的另一个有趣的观察是,如果我这样做了:

def index
  @announcements = Announcement.all
  puts @announcements.empty?.to_s # Returns: "false"
end

'空的?工作正常。

有没有其他人有同样的问题,还是只有我一个?

4

1 回答 1

0

Rails 以惰性方式加载集合,因此当您检查它加载时,它不再为空。

于 2012-08-28T04:31:39.453 回答