简单的包含()不起作用

时间:2015-11-28 22:05:45

标签: ruby-on-rails ruby

我有以下范围:

这是product.rb:

    has_one :current_price, -> {
    where('prices.id = (SELECT MAX(id) FROM prices p2 WHERE product_id = prices.product_id)') 
  }, class_name: 'Price'

我正在尝试获取特定产品的当前价格,并且我在没有include()的情况下获得产品数据。

这是product_controller.rb:

  def current_price
    @product = Product.includes(:current_price).where("id = ?", params[:id])
    respond_to do |format|
      format.json { render :json => @product }
    end
  end

例如,我得到这个JSON:

{"id":10,"name":"Corneta Minipill","created_at":"2015-11-25T19:49:37.000-04:30","updated_at":"2015-11-25T19:49:37.000-04:30","published":null}

我使用相同的JSON添加current_price结果,例如:

{"id":10,"name":"Corneta Minipill","created_at":"2015-11-25T19:49:37.000-04:30","updated_at":"2015-11-25T19:49:37.000-04:30","published":null,"current_price":"2000"}

之前我使用了相同的includes()并且它有效。

我已尝试将includes()替换为joins()eager_load()

发生了什么事?

1 个答案:

答案 0 :(得分:3)

ActiveRecord::QueryMethods.includes只能加载关联。

但它不会更改模型的序列化表示,因此相关模型不会自动包含在序列化结果中 - 您必须pass to_json的包含选项方法也是如此。