<% for invoice in @invoices %> <%= invoice.price %> <%= invoice.customer.name %> <% end %>のように。でも、この場合、invoice の数 + 1 のsql 文が発生するので無駄が多い。
そんなときは、関連テーブルも include するべし。
@invoices = Invoice.find(:all, :conditions => {..}, :include => :customer)さらに、include したテーブルの一部しか使わない場合、:select も使いたいが、なぜか標準では、:inlcude したテーブルに :select が使えない。
@invoices = Invoice.find(:all, :conditions => {..}, :include => :customer, :select => 'customers.name, customer.id')なんてできるといいのに。。。
これを可能にする pluging が Snow Giraffe の Eager loading select plugin. Rails 2.3 まで対応。
0 件のコメント:
コメントを投稿