5

ActiveRecordをサブクラス化するモデルオブジェクトがあります。さらに、STIを使用して、このオブジェクトのサブクラスを定義しました。これにより、さまざまなタイプと動作が定義されます。構造は次のようになります。

class AppModule < ActiveRecord::Base
  belongs_to :app 
end

class AppModuleList < AppModule

end

class AppModuleSearch < AppModule

end

class AppModuleThumbs < AppModule

end

ここで、ユーザーが新しいAppModuleを作成するオプションがあるビューで、ドロップダウンメニューから選択してもらいたいと思います。ただし、subclasses()メソッドを使用してAppModuleのサブクラスのリストを取得できませんでした。

<% form_for(@app_module) do |f| %>
  <%= f.error_messages %>

  <p>
    <%= f.label :type %><br />
    <%= f.select(:type, options_from_collection_for_select(@app_module.subclasses().map{ |c| c.to_s }.sort)) %>
  </p>
  <p>
    <%= f.submit 'Create' %>
  </p>
<% end %>

私は得る:

NoMethodError: undefined method `subclasses' for #<AppModule:0x1036b76d8>

助けていただければ幸いです。どうもありがとう!

4

2 に答える 2

10

最近追加subclassesされたように見えます(メソッドはさまざまな時点でさまざまなクラスに存在しますが、シャッフルされて削除され続けています。そのリンクは、メソッドがスタックした最も早いポイントのようです)。RoRの最新バージョンにアップグレードするオプションがない場合は、独自のバージョンを作成し、それを使用してデータを入力できます(これは、RoRが行うことです)。subclassesClass#inheriteddescendents_tracker

于 2010-11-14T11:39:08.377 に答える
5

AppModule.descendants.map &:nameあなたが探しているものです。のように:

<% form_for(@app_module) do |f| %>
  <%= f.error_messages %>

  <p>
    <%= f.label :type %><br />
    <%= f.select(:type, options_from_collection_for_select(AppModule.descendants.map(&:name).sort)) %>
  </p>
  <p>
    <%= f.submit 'Create' %>
  </p>
<% end %> 
于 2012-02-14T22:19:27.520 に答える