我有以下范围:
这是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()
。
发生了什么事?
答案 0 :(得分:3)
ActiveRecord::QueryMethods.includes
只能加载关联。
但它不会更改模型的序列化表示,因此相关模型不会自动包含在序列化结果中 - 您必须pass to_json
的包含选项方法也是如此。