【发布时间】:2023-03-17 13:50:01
【问题描述】:
我正在使用 2 个连接模型
class Product < ActiveRecord::Base
has_and_belongs_to_many :providers
end
class Provider < ActiveRecord::Base
has_and_belongs_to_many :products
end
我的控制器看起来像这样
class ProductsController < ApplicationController
@products = Product.find(
:all,
:joins => :providers,
:select => "providers.id, providers.title, products.id, products.title, products.price",
:limit => 10)
respond_to do |format|
format.xml { render :xml => @products }
format.json { render :json => @products }
end
end
end
@products 未按预期呈现。 XML 文件中仅显示 Product 模型的列。我尝试将 format.xml 行更改为
format.xml { render :xml => @products.to_xml( :include => :providers) }
但这不是我想要的。你可以查看我的 5 列 SQL 查询
SELECT providers.id, providers.title, products.id, products.title, products.price
FROM `products`
INNER JOIN `products_providers` ON `products_providers`.product_id = `products`.id
INNER JOIN `providers` ON `providers`.id = `products_providers`.provider_id
LIMIT 10
但在我的 XML 中只显示了 3 个。 to_xml 方法还会生成一些外部 SQL 请求,我不希望这样。
谁能告诉我如何告诉 Rails 呈现我的所有 SQL 字段?我也希望代码得到优化。
理想的 XML/JSON 设计应该是
<products type="array">
<product>
<id type="integer">1</id>
<price type="decimal">9.99</price>
<title type="string">Sanke Rolex</title>
<provider>
<id type="string">1</id>
<title type="string"></title>
</provider>
</product>
</products>
谢谢!
【问题讨论】:
标签: ruby-on-rails xml inner-join render