Tôi có một đối tượng mô hình phân lớp ActiveRecord. Ngoài ra, bằng cách sử dụng STI, tôi đã xác định các lớp con của đối tượng này, xác định các loại và hành vi khác nhau. Cấu trúc trông giống như sau:Cách lấy một mảng các lớp con trong Rails
class AppModule < ActiveRecord::Base
belongs_to :app
end
class AppModuleList < AppModule
end
class AppModuleSearch < AppModule
end
class AppModuleThumbs < AppModule
end
Bây giờ, trong chế độ xem người dùng có tùy chọn tạo Mô-đun ứng dụng mới, tôi muốn họ chọn từ menu thả xuống. Tuy nhiên tôi đã không thể có được một danh sách các lớp con của AppModule bằng cách sử dụng các lớp con() phương pháp:
<% 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 %>
tôi nhận được:
NoMethodError: undefined method `subclasses' for #<AppModule:0x1036b76d8>
Tôi đánh giá cao sự giúp đỡ nào. Cảm ơn rất nhiều!
Phiên bản Ruby on Rails nào bạn đang sử dụng? – outis
Đường ray 2.3.8, Ruby 1.8.7 –
Lớp có phương thức 'hậu duệ 'trong [3.0.0] (http://rubydoc.info/docs/rails/3.0.0/Class#descendants-instance_method), nhưng không [2.3.8] (http://rubydoc.info/docs/rails/2.3.8/Class#descendants-instance_method). – outis