Как переписать / расширить существующие классы оживления в приложении / моделях? - PullRequest
1 голос
/ 30 января 2010

Я хочу расширить роль класса, чтобы я мог добавить больше ролей к Таблица ролей в Шпрее. Моя заявка будет иметь разные цены на основе по ролям.

По умолчанию роли содержат: ("admin" и "user"). Я хочу добавить больше типы к таблице.

В1: Могу ли я просто расширить класс Role в одном из моих расширений? Q2: Как я могу реализовать (на самом деле расширить на app / models / Variant.rb) цены, основанные на разных ролях, так что он просто берет цену от одного место? Так что мне не нужно менять код в файлах * _html.erb, где его цена использования.

Если бы я мог заставить это работать, это было бы классным расширением, чтобы иметь на GitHub.

Спасибо

1 Ответ

5 голосов
/ 06 февраля 2010

Чтобы расширить классы в Spree, вы можете использовать Модули или class_eval. Расширения Шпрее, как правило, используют class_eval. Вот пример расширения User и Variant в пользовательском расширении.

class CustomRoleExtension < Spree::Extension

  # main extension method
  def activate

    # extend User
    User.class_eval do
      def business?
        self.roles.include?("business")
      end

      def sponsor?
        self.roles.include?("sponsor")
      end

      def developer?
        self.roles.include?("developer")
      end
    end

    # extend Variant
    Variant.class_eval do
      def price_for(role)
        # ...
      end
    end
  end

end

Чтобы добавить больше ролей, я просто добавил defaults/roles.yml к своему расширению с пользовательскими блоками yaml:

coach_role:
  id: 3
  name: coach

trainer_role:
  id: 4
  name: trainer

graduate_role:
  id: 5
  name: graduate

Затем, когда вы запустите rake db:bootstrap, он добавит все эти роли в базу данных.

Дайте мне знать, если это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...