Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby mixin最佳实践_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails Ruby mixin最佳实践

Ruby on rails Ruby mixin最佳实践,ruby-on-rails,ruby,Ruby On Rails,Ruby,Ruby\Rails新手,真丢脸:( 我正在开发一个供个人使用的引擎(简单的管理面板)。我想要的是能够配置我的主应用程序的模型,如下所示: class User < ActiveRecord::Base include Entropy::Configurable entropy_config do form_caption 'Editing user' end end 问题是,当我在@object上调用entropy\u config时,我无法从可配置模块访问@@

Ruby\Rails新手,真丢脸:(

我正在开发一个供个人使用的引擎(简单的管理面板)。我想要的是能够配置我的主应用程序的模型,如下所示:

class User < ActiveRecord::Base

  include Entropy::Configurable

  entropy_config do
    form_caption 'Editing user'
  end
end

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

首先,你做错了。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

请参阅以获取更多信息

你说没有访问权限是什么意思,变量不存在?谢谢!交易不仅仅是关于标题,更多是关于管理配置,例如表单字段集,或者列表中的字段。我仍然认为模型不适合它。如果你不想在视图中定义字段,你应该创建一些单独的看看activeadmin是如何工作的,顺便说一句……作为rails提示:当你需要一些组件时,搜索rubygems.org(或ruby toolbox.com),因为很可能有人已经开发了该组件:)
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
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