2013-11-14 48 views
0

新紅寶石\ Rails的,可恥的是我:(紅寶石混入最佳實踐

我正在開發用於個人用途(簡單的管理面板)的發動機。我想要什麼,是要能夠配置我的主要應用程序的模型,像這樣:

class User < ActiveRecord::Base 

    include Entropy::Configurable 

    entropy_config do 
    form_caption 'Editing user' 
    end 
end 

然後在發動機的模板,這樣做:

<h1><%= @object.entropy_config :form_caption %></h1> 

引擎模塊:

module Entropy 
    module Configurable 

    def self.included(base) 
     ## to call entropy_config in model class 
     base.send :extend, ClassMethods 
    end 

    def entropy_config(arg) 
     ## ... I'm missing this part 
    end 

    module ClassMethods 

     @@config = { ... } 

     def entropy_config (&block) 
     class_eval &block 
     end 

     def form_caption(arg) 
     // skipping class identification 
     @@config[:user][:form_caption] = arg 
     end 
    end 
    end 
end 

問題是我無法從Configurable模塊訪問@@ config,實際上當我在@object上調用entropy_config時。我做錯了什麼?

+0

你是什麼意思都進不去呢,該變量不存在? –

回答

0

首先你做錯了。 Rails是在MVC架構上推動了很多的框架。讓你的模型知道表單標題是錯誤的。爲此,我會使用導軌i18n寶石。對於參數的緣故這裏的一些未經測試的代碼,可能會回答你的問題:

module Entropy 
    module Configurable 

    def self.included(base) 
     ## to call entropy_config in model class 
     base.send :extend, ClassMethods 
    end 

    def entropy_config(key) 
     self.class.config[:user][key] 
    end 

    module ClassMethods 

     cattr_accessor :config 

     def entropy_config (&block) 
     self.config ||= {} 
     class_eval &block 
     end 

     def form_caption(arg) 
     // skipping class identification 
     self.config[:user][:form_caption] = arg 
     end 
    end 
    end 
end 

看到http://apidock.com/rails/Class/cattr_accessor更多信息

+0

謝謝!這筆交易不僅僅是關於標題,更多的是關於管理配置,例如表單域設置或列表中的字段 – Eugene

+0

我仍然相信模型不適合它。如果您不想在視圖中定義字段,則應爲其創建一些單獨的對象。看看activeadmin如何工作https://github.com/gregbell/active_admin – bcd

+0

btw ...作爲Rails提示:無論何時你需要一些組件搜索rubygems.org(或ruby-toolbox.com),因爲這是一個很好的機會有人已經開發出這個組件:) – bcd