2

Rails STI を使用して複雑なドメインをモデル化しています。ビューでは、すべてのサブクラスを次のようにリストしています。

> <% StateDescription.subclasses.each do |state_description| %>   <li>
> <%= state_description.to_s %> </li> <% end %>

最終的に、サブクラスの各ラベルを、そのサブクラスのインスタンスのみの個々の「インデックス」ページへのリンクにすることを目的としています。

これにより、考えられるすべてのサブクラスのリストを自分で用意する必要がなくなります (さらに追加する場合は後で更新します)。

ただし、データベースから実際にロードしたサブクラスのみがリストに表示されることに気付きました。StateDescription.all と言うと、既存のすべてのサブクラスが表示されます (ただし、まだインスタンスを持たないサブクラスは表示されません)。代わりに、特定のサブクラスのすべてを要求すると、そのサブクラスのみが表示されます。

これは、私が聞いた「遅延読み込み」の一部だと思います。それは...ですか?問題は、データベースから特定の「タイプ」を取得しない場合、そのモデルがあったとしても、それが存在しない可能性があることです。

これを回避する方法はありますか、それとも、作成するすべてのサブクラスのリンクを書き出さなければならない運命にありますか?

編集:

コンソールで、入力すると

StateDescription.subclasses.count

私は0を取得します。

その後、StateDescription.all と THEN StateDescription.subclasses.count を実行すると、14 になります。

4

3 に答える 3

0

未検証!

StateDescription.select("distinct type").map { |sd|  Kernel.const_get(sd.type) }

于 2013-08-14T19:14:46.493 に答える