12/08/2018, 11:54

In ra bảng quan hệ n*n theo dạng ma trận với ít lần hit vào database

Bảng quan hệ (relation) giữa 2 model thường gặp và việc in ra dưới dạng ma trận 2 chiều đôi khi bị chậm lại vì việc hit vào database quá nhiều lần, hi vọng tip nho nhỏ sau đây có thể giúp ích phần nào công việc của bạn. Giả sử chúng ta có 2 bảng x_value, và y_value # x_value.rb class XValue ...

Bảng quan hệ (relation) giữa 2 model thường gặp và việc in ra dưới dạng ma trận 2 chiều đôi khi bị chậm lại vì việc hit vào database quá nhiều lần, hi vọng tip nho nhỏ sau đây có thể giúp ích phần nào công việc của bạn. Giả sử chúng ta có 2 bảng x_value, và y_value

# x_value.rb
class XValue < ActiveRecord::Base
  has_and_belongs_to_many :y_values
end
# y_value.rb
class YValue < ActiveRecord::Base
  has_and_belongs_to_many :x_values
end

Bảng quan hệ:

# x_values_y_value.rb
class XValuesYValue < ActiveRecord::Base
  belongs_to :x_value
  belongs_to :y_value
end

Index của bảng quan hệ:

# index.html.erb
<table>
  <tr>
    <td></td>
    <% @x_values.each do |x_value| %>
      <td> x_value.name %>td>
    <% end %>
    </tr><% @y_values.each do |y_value| %>
    <tr>
      <td><%= y_value.name %></td>
      <% @x_values.each do |x_value| %>
        <td> @x_values_y_values.find_by(x_value: x_value,
        y_value: y_value).id rescue nil %><td>
      <% end %>
    </tr>
   <% end %>
  <tr>
</table>

Màn hình sẽ là như thế này (vị trí trống là không có quan hệ, vị trí có quan hệ là id của x_values_y_value):

nn_01.jpg

<%= @x_values_y_values.find_by(x_value: x_value,
y_value: y_value).id rescue nil %>

Dòng này sẽ làm cho việc hit vào database số lần bằng số phần tử trong bảng             </div>
            
            <div class=

0