Я знаю, что опаздываю, но, пытаясь понять, как это сделать сам, я наткнулся на этот вопрос.
Я думаю, что ответ на вопрос, почему повторное открытие класса не работаеткак ожидается в примере кода, класс первоначально определяется как:
(в model1.rb)
class Model1 < ActiveRecord::Base
, а затем вновь открывается как: (в model1_section1.rb)
class Model1
то есть во втором определении отсутствует унаследованный класс.
Я использовал отдельные файлы .rb, чтобы разделить мои огромные модели, и они отлично сработали для меня.Хотя я признаю, что использовал include и что-то еще подобное:
(в workcase.rb)
class Workcase < ActiveRecord::Base
include AuthorizationsWorkcase
include WorkcaseMakePublic
include WorkcasePostActions
after_create :set_post_create_attributes
# associations, etc
# rest of my core model definition
end
(в workcase_make_public.rb)
module WorkcaseMakePublic
def alt_url_subject
self.subject.gsub(/[^a-zA-Z0-9]/, '_').downcase
end
# more object definitions
end
class Workcase < ActiveRecord::Base
def self.get_my_stuff
do_something_non_instance_related
end
# more class definitions
end
Это позволило мне включить методы класса и объекта в каждый включенный файл .rb.Единственное предостережение (поскольку я не использовал расширение проблем) заключалось в том, что для доступа к константам класса из методов объекта модуля требовалось, чтобы константа была квалифицирована по имени класса (например, Workcase :: SOME_CONST), а не напрямую, как было бы допустимоесли вызвано в первичном файле.
В целом, этот подход, казалось, требовал наименьшего количества переписывания моего кода, чтобы превратить вещи в управляемые блоки кода.
Может быть, это не так 'Rails way ', но, похоже, это хорошо работает в моем конкретном сценарии.