奇怪的空? Rails中的行为3.2.8

时间:2012-08-28 04:05:42

标签: ruby-on-rails ruby-on-rails-3.2

背景资料:
型号:应用程序和公告
协会: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

“真实”不是我所期待的,因为我确信我有数据。所以我添加了一个'inspect'调用来检查@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
嗯......有趣。所以除了在我的变量中添加'inspect'之外没有改变任何东西,'empty?'方法返回了不同的结果。

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

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

'空?'工作得很好。

其他人是否有同样的问题,或者只是我?

1 个答案:

答案 0 :(得分:0)

Rails以懒惰的方式加载集合,因此当你检查它时,它不再是空的。