我在Rails中緩慢加載頁面時遇到了一些問題,我確定由於查詢數據庫(PostgreSQL)的方式。總結這種情況,我有三種模式 - 我們稱它們爲Model A
,Model B
和Model C
- 我插入表中,並且正在努力尋找一種有效的方式來查詢數據。在Rails中涉及三種模型的最快`哪裏'請求
Model A
提供了表格的標題行Model B
中的每一行tbody
; Model C
屬於Model A
和Model B
並提供表格數據。
這裏有一個簡單的例子:
說出模型變量如下:
@model_a = ModelA.all
@model_b = ModelB.all
@model_c = ModelC.all
相關如下:其中
class ModelA
has_many :model_cs
end
class ModelB
has_many :model_cs
end
class ModelC
belongs_to :model_a
belongs_to :model_b
end
視圖:
<table>
<thead>
<tr>
<th></th>
<!-- Model A provides the table headers -->
<% @model_a.each do |a| %>
<th>
<%= a.name %>
</th>
<% end %>
</tr>
</thead>
<tbody>
<!-- Each row represents a different instance of Model B -->
<% @model_b.each do |b| %>
<tr>
<td>
<%= b.name %>
</td>
<% @model_a.each do |a| %>
<td>
<!-- The actual table data is from Model C, when it belongs to both Model A and Model B -->
<% if (c = @model_c.where(model_a_id: a.id, model_b_id: b.id).first).present? %>
<%= c.name %>
<% end %>
</td>
<% end %>
</tr>
<% end %>
</tbody>
</table>
明顯這真的很慢,而且我會想象,很臭的代碼。我可以緩存片段,但是會更加快速地請求,以便在對數據進行任何更改後順利運行。很高興能考慮採用不同的方法 - 我無法想出一種以這種方式呈現數據的方式,而無需通過兩種模型來查詢第三種。
我敢肯定,還有很遠,遠更好的方法來解決這個問題,但還沒有拿出它。希望你們能夠提供幫助 - 事先感謝Steve。
請編輯您的問題,包括定義'@ model_a'代碼,'@ model_b'和'@ model_c'。 –
嗨喬丹 - 已經完成了。我還添加了他們相關的方式。謝謝。 – SRack