1
我有一個視圖,顯示來自父項(組在我的情況下)和它的孩子(在我的情況下的行)的記錄,雖然它的工作,我覺得我不是這樣做正確的Rails MVC方式。Rails父子模型查看最佳實踐
我的車型有:
class Group < ActiveRecord::Base
has_many :lines, dependent: :destroy
belongs_to :user
end
class Line < ActiveRecord::Base
belongs_to :group
end
我的羣組控制器打印方式是:
def print
@groups = current_user.groups.order('position ASC').all
end
我打印的看法是:
<table class="table table-striped">
<thead>
<tr>
<th>Description:</th>
</tr>
</thead>
<tbody>
<% @groups.each do |group| %>
<tr>
<td><h3><%= group.description %></h3></td>
</tr>
<% group.lines.each do |line| %>
<tr>
<td><%= line.description %></td>
</tr>
<% end %>
<% end %>
</tbody>
</table>
我的打印方法將返回所有組這是罰款就像索引方法一樣。它生成以下SQL:
SELECT "groups".* FROM "groups" WHERE "groups"."user_id" = ? ORDER BY position ASC [["user_id", 1]]
在那裏我想我會錯是,我有我的打印驗證碼以上視圖:
lines group.lines.each do |line|
這個運行每個每次組,它生成這樣的另一個查詢(爲每個組:
SELECT "lines".* FROM "lines" WHERE "lines"."group_id" = ? [["group_id", 667]
這似乎低效的,因爲該查詢正在運行很多次。我也告訴我,我的查詢實際上應該從我的控制器運行,而不是我的視圖(即正確的Rails/MVC方式)。
我該如何做得更好?
在此先感謝
感謝時,使用
includes
方法這樣,你將只能得到2個查詢(一個團體,一個用於線)和無查詢來完成。我當然不知道這一點。 我是否需要更改我的視圖,因爲它似乎仍在執行行查詢? – comphelp
我發現我的問題。我在視圖中添加了一個訂單(自發布以來),這導致了多個查詢。當我將訂單移動到控制器時(與您的指示相結合),它可以很好地工作。乾杯 – comphelp