2011-04-14 76 views
0

我有兩個Rails 2.3應用程序,我們將其稱爲admin前端。在admin我有我的所有型號在app/models指定。在前端我有那些模型符號鏈接。我想將前端特定的方法添加到僅顯示前端應用程序的模型中,而不是管理程序應用程序。Rails在不修改基本文件的情況下擴展模型

一開始我嘗試只是增加config.autoload_paths += "#{RAILS_ROOT}/app/augments/address.rb"有:

class Address 
    def hello 
    "hello world" 
    end 
end 

但是,這只是沒有加載。致電Address.first.hello將遇到undefined method 'hello'

如果我需要做這個文件:

Address.class_eval do 
    def hello 
    "hello world" 
    end 
end 

它加載一次,併爲發展先打它的工作原理,但它發生故障,所有後續重新加載。這是由於config.cache_classes = false正在開發中。

一個半工作解決方案是運行都是從ApplicationController:

class ApplicationController < ActionController::Base 
    Address.class_eval do 
    def hello 
     "hello world" 
    end 
    end 
end 

哪些呢重裝和工程開發andprod每一次,但對於腳本/亞軍或腳本/控制檯不起作用。 (如果這是唯一的解決方案,我確信我們可以將其提取到模塊中,並在ApplicationController中使用include ModelExtensions。)

有什麼我可以添加到environment.rb或初始化程序,每次開發時都會重新加載?

回答

0

要擴展您的班級,您應該使用模塊並將其包含在您的模型中。事情是這樣的:

module Address 
    def hello 
    "hello world" 
    end 
end 

這是對這樣的說法舊的,但總是interesing文章:http://weblog.jamisbuck.org/2007/1/17/concerns-in-activerecord

包含模塊只在前端如果與存在的模塊,你應該檢查:

Class A 
    include Address if defined? Address 
end 
+0

是的,但我不想實際添加** AddressModelExtensions **到我的address.rb,因爲這不適用於我的**管理**應用程序,因爲該模塊只生活在**前端** – 2011-04-14 23:02:02

+0

嗯...是的,我知道了。只是一個問題,爲什麼你應該使用兩個不同的應用程序 – 2011-04-14 23:03:46

+0

代碼分離和加載。另外,它們將在NewRelic中分別顯示,我們可以分別對它們進行縮放。 – 2011-04-14 23:11:46

相關問題