如何加载新对象的创建?

时间:2012-05-05 00:12:34

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

我像往常一样在我的应用中创建建议:

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

2 个答案:

答案 0 :(得分:0)

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

scope :includes(:service)

答案 1 :(得分:0)

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