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):
<%= @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