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

elg*_*cid 1 ruby-on-rails spree

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

默认情况下,角色中包​​含:("admin"和"user").我想在表格中添加更多类型.

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

如果我可以让这个工作,那将是github的一个很酷的扩展.

谢谢

Lan*_*ard 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
Run Code Online (Sandbox Code Playgroud)

要添加更多角色,我只是defaults/roles.yml在我的扩展中添加了一个自定义yaml块:

coach_role:
  id: 3
  name: coach

trainer_role:
  id: 4
  name: trainer

graduate_role:
  id: 5
  name: graduate
Run Code Online (Sandbox Code Playgroud)

然后,当您运行时rake db:bootstrap,它会将所有这些角色添加到数据库中.

如果有效,请告诉我.