rails 3:包含find()

ed1*_*d1t 2 ruby ruby-on-rails ruby-on-rails-3

我有一个模型用户,其中has_many:messages和message属于:user.

当我执行Message.find(1,:include =>:user)时,它不会返回给我用户,但如果我执行Message.find(1).to_json(:include =>:user),它确实包含了用户对象哈希.

我怎样才能将它包含在Message.find(1,:include =>:user)中?

Mik*_*wis 8

这是一个急切/懒惰加载的情况.当你这样做时:

Message.find(1, :include => :user)
Run Code Online (Sandbox Code Playgroud)

您正急切地加载用户,因为您打电话时@message.user,您没有进行另一个查询来获取用户,而执行:

Message.find(1)
Run Code Online (Sandbox Code Playgroud)

将找到该消息,并调用@message.user将进行另一个SQL查询(也称为延迟加载).

如果您查看发送到服务器的实际SQL查询,您将看到您在第一个示例中提取用户.

它没有显示的原因是因为当你检查@message它时只显示消息,而不是调用to_json,这会强制检查user.