Ho un oggetto modello che sottoclasse ActiveRecord. Inoltre, usando STI, ho definito sottoclassi di questo oggetto, che definiscono diversi tipi e comportamenti. La struttura simile a questa:Come ottenere un array di sottoclassi in Rails
class AppModule < ActiveRecord::Base
belongs_to :app
end
class AppModuleList < AppModule
end
class AppModuleSearch < AppModule
end
class AppModuleThumbs < AppModule
end
Ora, in una vista in cui l'utente ha la possibilità di creare nuovi AppModules, vorrei loro di selezionare da un menu a discesa. Metodo Tuttavia non sono stato in grado di ottenere un elenco di sottoclassi di AppModule utilizzando le sottoclassi():
<% 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 %>
ottengo:
NoMethodError: undefined method `subclasses' for #<AppModule:0x1036b76d8>
Apprezzerei tutto l'aiuto. Molte grazie!
Quale versione di Ruby on Rails stai usando? – outis
Rails 2.3.8, Ruby 1.8.7 –
La classe ha un metodo 'descendents' in [3.0.0] (http://rubydoc.info/docs/rails/3.0.0/Class#descendants-instance_method), ma non [2.3.8] (http://rubydoc.info/docs/rails/2.3.8/Class#descendants-instance_method). – outis