0

Ruby\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

问题是我无法从可配置模块访问@@config,实际上当我在@object 上调用entropy_config 时。我做错了什么?

4

1 回答 1

0

首先你做错了。Rails 是对 MVC 架构有很大推动作用的框架之一。让你的模型知道表单标题是错误的。为此,我会使用 rails i18n gem。为了争论,这里有一些未经测试的代码可能会回答你的问题:

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

于 2013-11-14T14:44:09.363 回答