2011-12-15 74 views
1

我有一个users_manager引擎,它有一个User模型类。修改控制器文件后加载了哪些文件?

在其他购物搜索引擎,我在User模型添加一些协会与下面的代码,在shopping/lib/shopping.rb

module Shopping 
    class Engine<Rails::Engine 
    initializer :shopping_append_user do 
     UsersManager::User.class_eval do 
     has_many :products,:class_name=>"Shopping::Product" 
     has_many :virtues,:class_name=>"Shopping::Virtue" 
     has_many :containers,:class_name=>"Shopping::Container" 
     has_many :concerns,:class_name=>"Shopping::Concern" 
     has_many :remarks,:class_name=>"Shopping::Remark" 
     has_many :praisings,:class_name=>"Shopping::Praising" 
     has_one :cart,:class_name=>"Shopping::Cart" 
     has_one :shop_information,:class_name=>"Shopping::ShopInformation" 
     has_many :comments,:class_name=>"Shopping::Comment" 
     has_many :created_orders,:class_name=>"Shopping::Order",:foreign_key=>"creator_id" 
     has_many :processing_orders,:class_name=>"Shopping::Order",:foreign_key=>"processor_id" 
     end 
    end 

    initializer :shopping_append_file do 
     Upload::File.class_eval do 
     has_many :image_uuids,:class_name=>"Shopping::ImageUuid" 
     end 
    end 
    end 

    def self.table_name_prefix 
    "shopping_" 
    end 
end 

运行rails server后,应用程序工作正常。然而,修改一个控制器文件后,我浏览网页,它给了我下面的消息:

undefined method `products' for #<UsersManager::User:0x00000003022a58> 

如何轨重新加载该文件修改后他们?我怎样才能让我的引擎正常工作?

我的Rails的版本是从GitHub 3.2.0.pre,Ruby是1.9.0。

回答

1

你的初始化中每个请求重新加载,这意味着当它被重新装入您在UsersManager::User类自定义都将丢失。

你可以做,而不是执行以下操作:

module Shopping 
    class Engine < Rails::Engine 
    config.to_prepare do 
     Shopping.customize_user 
     Shopping.customize_file 
    end 
    end 

    def self.customize_user 
    UsersManager::User.class_eval do 
     has_many :products,:class_name=>"Shopping::Product" 
     has_many :virtues,:class_name=>"Shopping::Virtue" 
     has_many :containers,:class_name=>"Shopping::Container" 
     has_many :concerns,:class_name=>"Shopping::Concern" 
     has_many :remarks,:class_name=>"Shopping::Remark" 
     has_many :praisings,:class_name=>"Shopping::Praising" 
     has_one :cart,:class_name=>"Shopping::Cart" 
     has_one :shop_information,:class_name=>"Shopping::ShopInformation" 
     has_many :comments,:class_name=>"Shopping::Comment" 
     has_many :created_orders,:class_name=>"Shopping::Order",:foreign_key=>"creator_id" 
     has_many :processing_orders,:class_name=>"Shopping::Order",:foreign_key=>"processor_id" 
    end 
    end 

    def self.customize_file 
    Upload::File.class_eval do 
     has_many :image_uuids,:class_name=>"Shopping::ImageUuid" 
    end 
    end 

    def self.table_name_prefix 
    "shopping_" 
    end 
end 

config.to_prepare块在生产和开发(source)每一个请求之前运行一次。

+0

Thanks.In的config.to_prepare块,自我是ActionDispatch :: Reloader.So self.customize_file和self.customize_user的一个实例不能在confing.to_prepare块被调用。 – 2011-12-15 10:55:10

相关问题