2013-11-14 5 views
0

Новой Руби \ Rails, пристыдить меня :(Рубин Mixin лучшие практики

Я развивающийся двигатель для личного пользования (простой админ-панель). То, что я хочу, чтобы иметь возможность конфига мои основные приложений модели, как это:

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 из настраиваемого модуля, фактически, когда я вызываю entropy_config в @object. Что я делаю неправильно?

+0

Что вы имеете в виду не имеют доступа, переменная не существует? –

ответ

0

Прежде всего, вы делаете это неправильно. Rails включен в рамки, которые сильно повлияли на архитектуру MVC. Неверно знать вашу модель о подписях в форме. Для этого я бы использовал рельсы 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 для получения дополнительной информации

+0

Спасибо! Дело в том, что речь идет не только о названиях, но и о настройках администратора, например, о полях полей или в списке в списке – Eugene

+0

Тем не менее, я считаю, что модель не подходит для этого. Если вы не хотите определять поля в представлениях, вы должны создать для этого несколько отдельных объектов. Посмотрите, как activeadmin работает https://github.com/gregbell/active_admin – bcd

+0

btw ... как подсказка для рельсов: всякий раз, когда вам нужен какой-то компонентный поиск rubygems.org (или ruby-toolbox.com), так как это хороший шанс, что кто-то уже разработал этот компонент :) – bcd

Смежные вопросы