如何在app / models中覆盖/扩展现有的spree类?

时间:2010-01-30 03:06:55

标签: ruby-on-rails spree

我想扩展类角色,以便我可以添加更多角色 Spree中的角色表。我的申请会有不同的价格 角色。

默认情况下,角色中包​​含:(“admin”和“user”)。我想补充更多 表格的类型。

Q1:我可以在我的一个扩展中扩展Role类吗? Q2:我如何实现(实际上扩展到app / models / Variant.rb) 价格基于不同的角色,只是从一个角度获得价格 地点?所以我不必更改* _html.erb文件中的代码 它的使用价格。

如果我能让这个工作起来,这将是一个很酷的扩展 github上。

谢谢

1 个答案:

答案 0 :(得分:5)

要在Spree中扩展类,可以使用模块或class_eval。狂欢扩展倾向于使用class_eval。以下是在自定义扩展程序中扩展UserVariant的示例。

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时,它会将所有这些角色添加到数据库中。

如果有效,请告诉我。