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 が期待どおりにレンダリングされません。Product モデルの列のみが XML ファイルに表示されます。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>
THX!