我试图将大型模型分成多个文件进行逻辑组织.所以我有两个文件:
model1.rb
class Model1 < ActiveRecord::Base before_destroy :destroying has_many :things,:dependent=>:destroy def method1 ... end def method2 ... end end require 'model1_section1'
model1_section1.rb
class Model1 def method3 ... end def self.class_method4 ... end end
但是当应用程序加载时,并且有一个对Model1.class_method4的调用,我得到:
undefined method `class_method4' for #<Class:0x92534d0>
我也试过这个要求:
require File.join(File.dirname(__FILE__),'model1_section1')
我在这里做错了什么?
解决方法
我知道我稍晚回答这个问题,但是我刚才在我的一个应用程序中做了这个,所以以为我会发布我使用的解决方案.
让我们这是我的模特儿:
class Model1 < ActiveRecord::Base # Stuff you'd like to keep in here before_destroy :destroying has_many :things,:dependent => :destroy def method1 end def method2 end # Stuff you'd like to extract before_create :to_creation_stuff scope :really_great_ones,#... def method3 end def method4 end end
您可以将其重构为:
# app/models/model1.rb require 'app/models/model1_mixins/extra_stuff' class Model1 < ActiveRecord::Base include Model1Mixins::ExtraStuff # Stuff you'd like to keep in here before_destroy :destroying has_many :things,:dependent => :destroy def method1 end def method2 end end
和:
# app/models/model1_mixins/extra_stuff.rb module Model1Mixins::ExtraStuff extend ActiveSupport::Concern included do before_create :to_creation_stuff scope :really_great_ones,#... end def method3 end def method4 end end
它的工作完美感谢ActiveSupport :: Concern给你的额外清洁.希望能解决这个老问题.