【问题标题】:How do I eager load on creation of new objects?如何在创建新对象时急切加载?
【发布时间】:2012-05-05 00:12:34
【问题描述】:

我照常在我的应用中创建建议:

class SuggestionsController < ApplicationController
  def create
    @suggestion = current_user.suggestions.new(params[:suggestion])

    if @suggestion.save
      render :show, status: :created
    else
      render :error, status: :unprocessable_entity
    end
  end
end

每个建议都属于一个服务(service_id 被发送到params[:suggestion] 中的创建操作)。

当我将建议返回给客户端时,我想在 JSON 中包含建议服务的详细信息。这意味着我应该急切地将它加载到某个地方以节省数据库请求。

如果我能找到建议,那就太好了:

Suggestion.includes(:service).find(params[:id])

我可以在保存时做类似的事情吗?

@suggestion = current_user.suggestions.new(params[:suggestion])
# This doesn't work.
@suggestion.includes(:service).save

【问题讨论】:

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


    【解决方案1】:

    您可以将此作为建议模型中默认范围的一部分

    scope :includes(:service)
    

    【讨论】:

    • 如果可能的话,我想要一种一次性完成的方法。
    【解决方案2】:

    您不能急切加载存档。仅在查询中。但是,一旦您保存并将@suggestion 返回到访问@suggestion.service 的视图,将访问数据库并为您返回适当的数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-12
      • 1970-01-01
      • 1970-01-01
      • 2011-12-03
      • 2014-07-29
      • 1970-01-01
      • 1970-01-01
      • 2014-10-13
      相关资源
      最近更新 更多