Чтобы расширить классы в 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
, он добавит все эти роли в базу данных.
Дайте мне знать, если это работает.