#ruby-on-rails #activerecord
#ruby-on-rails #activerecord
Вопрос:
У меня есть следующее:
order.rb
belongs_to :user
belongs_to :property
has_many :order_lines, :dependent => :destroy
order_line.rb
belongs_to :order
belongs_to :service
belongs_to :status, :class_name => "SettingsOption"
orders_controller.rb
def index
@orders = Order.active_w_property.find_all_by_user_id(current_user.id,
:include => {:order_lines => [:service, :status]})
end
index.html.erb
...
<%= render :partial => 'order', :collection => @orders %>
...
_order.html.erb
...
<% order.order_lines.each do |line| %>
<% total = total line.price %>
<tr>
<td>
<%= line.service.option.nil? ?
t(line.service.name) :
[t(line.service.name), t(line.service.option)].join(" ") %>
</td>
<td><%= t(line.description) %></td>
<td class="align-right"><%= currencify_price(line.price) %></td>
<td class="align-center"><%= t(line.status.value) %></td>
</tr>
<% end %>
...
журнал для index.html.erb
←[4;36;1mOrder Load (2.0ms)←[0m ←[0;1mSELECT ""very long query""
←[4;35;1mOrderLine Load (1.0ms)←[0m ←[0mSELECT `order_lines`.* FROM `order_lines` WHERE (`order_lines`.order_id IN (10134,1
←[4;36;1mOrderLine Columns (5.0ms)←[0m ←[0;1mSHOW FIELDS FROM `order_lines`←[0m
←[4;35;1mService Columns (14.0ms)←[0m ←[0mSHOW FIELDS FROM `services`←[0m
←[4;36;1mService Load (3.0ms)←[0m ←[0;1mSELECT * FROM `services` WHERE (`services`.`id` IN (6,7,8,9,1,2,3,4,10,5)) ←[0m
←[4;35;1mSettingsOption Columns (4.0ms)←[0m ←[0mSHOW FIELDS FROM `settings_options`←[0m
←[4;36;1mSettingsOption Load (3.0ms)←[0m ←[0;1mSELECT * FROM `settings_options` WHERE (`settings_options`.`id` = 167) ←[0m
Rendering template within layouts/application
Rendering myimmonatie/orders/index
журнал для _order.html.erb
Rendered myimmonatie/orders/_order (8.0ms)
←[4;36;1mOrderLine Load (0.0ms)←[0m ←[0;1mSELECT * FROM `order_lines` WHERE (`order_lines`.order_id = 10112) ←[0m
←[4;35;1mCACHE (0.0ms)←[0m ←[0mSELECT * FROM `services` WHERE (`services`.`id` = 1) ←[0m
←[4;36;1mCACHE (0.0ms)←[0m ←[0;1mSELECT * FROM `settings_options` WHERE (`settings_options`.`id` = 167) ←[0m
←[4;35;1mCACHE (0.0ms)←[0m ←[0mSELECT * FROM `services` WHERE (`services`.`id` = 5) ←[0m
←[4;36;1mCACHE (0.0ms)←[0m ←[0;1mSELECT * FROM `settings_options` WHERE (`settings_options`.`id` = 167) ←[0m
←[4;35;1mCACHE (0.0ms)←[0m ←[0mSELECT * FROM `services` WHERE (`services`.`id` = 3) ←[0m
←[4;36;1mCACHE (0.0ms)←[0m ←[0;1mSELECT * FROM `settings_options` WHERE (`settings_options`.`id` = 167) ←[0m
←[4;35;1mCACHE (0.0ms)←[0m ←[0mSELECT * FROM `services` WHERE (`services`.`id` = 2) ←[0m
←[4;36;1mCACHE (0.0ms)←[0m ←[0;1mSELECT * FROM `settings_options` WHERE (`settings_options`.`id` = 167) ←[0m
Для метода индекса контроллера все включенные таблицы загружаются, как ожидалось. Но для каждой order_line в partial строки order_lines загружаются снова, хотя они были загружены ранее. Также службы запрашиваются каждый раз (хотя и из кэша). Как я могу позволить всему просто отображаться без новых запросов?
ОБНОВЛЕНИЕ: использование rails 2.3.11
Комментарии:
1. Хорошей новостью является то, что активная запись не попадает в базу данных каждый раз, когда ответы кэшируются