如何覆盖/扩展应用程序/模型中现有的狂欢类?

发布于 2024-08-20 00:54:47 字数 298 浏览 9 评论 0原文

我想扩展类角色,以便我可以向类添加更多角色 Spree 中的角色表。我的应用程序将根据不同的价格 关于角色。

默认情况下,角色有:(“admin”和“user”)。我想添加更多 类型到表中。

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

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

谢谢

I want to extend Class Role such that I can add more roles to the
roles table in Spree. My application would have different prices based
on roles.

By default roles have: ("admin" and "user") in it. I want to add more
types to the table.

Q1: Can I just extend the Role class in one of my extensions?
Q2: How can I implement (actually extend on app/models/Variant.rb) the
prices based on different roles such that it just grabs price from one
place? So that I dont have to change code in *_html.erb files where
its using price.

If I can get this to work this would be a cool extension to have on
github.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

少女的英雄梦 2024-08-27 00:54:47

要扩展 Spree 中的类,您可以使用模块或 class_eval。 Spree 扩展倾向于使用 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 时,它将添加所有角色将这些角色添加到数据库中。

让我知道这是否有效。

To extend classes in Spree, you can use Modules or class_eval. Spree extensions tend to use class_eval. Here's an example for extending User and Variant in a custom extension.

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

To add more roles, I just added a defaults/roles.yml to my extension, with custom yaml blocks:

coach_role:
  id: 3
  name: coach

trainer_role:
  id: 4
  name: trainer

graduate_role:
  id: 5
  name: graduate

Then when you run rake db:bootstrap, it will add all those roles to the database.

Let me know if that works.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文