2010-01-30 61 views
1

我想擴展類角色,以便我可以將更多角色添加到Spree中的 角色表。我的應用程序在角色上會有不同的價格 。如何覆蓋/擴展應用程序/模型中的現有瘋狂類?

默認情況下,角色具有:(「admin」和「user」)。我想在表中添加更多 類型。

問題1:我可以在我的一個擴展中擴展Role類嗎? Q2:我如何根據不同的角色實現(實際上在app/models/Variant.rb上延伸) 價格,以便從一個 位置獲得價格?這樣我就不用更改* _html.erb文件中的代碼,其中 其使用價格。

如果我能得到這個工作,這將是一個很酷的擴展,有 github。

感謝

回答

5

要在施普雷擴展類,你可以使用模塊或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,將所有的這些角色添加到數據庫中。

讓我知道這是否有效。

+0

你能給完整的路徑(相對於webroot)嗎?我仍在研究在哪裏放置什麼。 – 2010-05-10 21:44:37

+0

哦,你不能在your_extension/app/models/user.rb文件中擴展模型嗎? – 2010-05-10 21:47:31

+0

viatropos,對於瘋狂的遲到回覆抱歉,但是,是的,它的工作。謝謝。 – elgrancid 2010-09-14 00:57:39