2017-11-04 104 views
1

我正面临着我为我的公司产品开发的Rails应用程序的设计问题。我的应用程序允许创建两个父类的子类。In rails如何允许在运行时创建新的类和模型

class Coupon 
    include Commonelements 
end 

class ServiceCenterCoupon < Coupon 
end 

class DealershipCoupon < Coupon 
end 

当你去到视图,你想创建一个新的优惠券,您选择的两个取决于params为创建一个新的优惠券[:coupon_type]

在控制器:

if params[:coupon_type] == 'dealershipcoupon' 
@coupon = DealershipCoupon.new(coupon_params) 
    if @coupon.save! 
    redirect_to @coupon 
    else 
    render :new 
    end 
elsif params[:coupon_type] == 'servicecentercoupon' 
@coupon = ServiceCenterCoupon.new(coupon_params) 
    if @coupon.save! 
    redirect_to @coupon 
    else 
    render :new 
    end 
end 

我想让管理员用户能够在运行时创建新的优惠券类型。说,有人想创建Repairshopcoupons类。 我需要对视图进行哪些更改,例如添加新表单或需要将哪些参数添加到现有表单以便能够在运行时创建新的优惠券子类?

我也明白,使用

repairshopcoupon = Class.new() 

可以工作。例如,在控制器中的这种代码的匿名功能可以工作:

Repairshopcoupon = Class.new(Coupon) do 
    include ActiveModel::Validations 
    validates_presence_of :title 

    def self.name 
    "Oil Change" 
    end 
end 

@newrepairshopcoupon = Repairshopcoupon.new 
@newrepairshopcoupon.save 

但我不确定。

我的第一个问题是:什么是正确的流程,如果我希望用户从视图中创建新类。控制器应该处理什么以及如何保存?

我的第二个问题是:很少有客户属于经销商和服务中心组。每个组都有权管理他们可以管理的优惠券类型。我希望属于多个群组的这些用户能够看到相应的优惠券库存以及哪些用户下载了这些库存。我觉得有必要改变我的数据模型,以便所有优惠券清单和下载列表完全属于一个授权组,但我没有关于最佳方式的具体想法。

我的第三个问题是:什么是改变我的看法/ UX用于创建和管理优惠券,使多个组的用户将能够逐一清查之间切换的最佳方法?在这种情况下,用户体验设计的专业行业标准是什么?

非常感谢您的帮助。

+2

你应该限制自己的一个问题。特别是当它们像这样广泛时。 – max

回答

0

让应用程序的用户在运行时生成的代码仅仅是一个非常糟糕的主意,因为潜在的bug和漏洞的数量是超乎想象的作为基本上允许未经测试的代码注入到在运行的应用程序。

它也将破坏应用程序中任何基于类的缓存。

它也不适用于像Heroku这样的云平台,它使用从上次代码提交创建的临时文件系统。

首先,您可能实际上并不需要针对每种“类型”优惠券使用不同的类别。您需要考虑每个班级的逻辑是否大不相同。

则很可能通过刚刚获得通过创建一个多态关联的发行人(的dealship或服务中心)。

class Coupon < Coupon 
    belongs_to :issuer, polymorphic: true 
end 

如果你想避免多态性不是仅仅将它作为一个标准的STI设置:

class Coupon 
    include Commonelements 
end 

class ServiceCenterCoupon < Coupon 
    self.table_name = 'coupons' 
    belongs_to :service_center 
end 

class DealershipCoupon < Coupon 
    self.table_name = 'coupons' 
    belongs_to :dealership 
end 
+0

酷!优惠券是子类,因为它们在其他方面有所不同。优惠券类是抽象的,只有子类正在实现各自的上传者。这是我得到合作的架构。如果我仅创建Coupon类的实例,则无法为每种类型创建不同的表。在这个应用程序工作的每个内部操作团队人员将管理只有一种类型的优惠券库存。 我的主要问题是如何能在用户通过在运行时,用户视图中创建新的优惠券。 就像当他们通过视图/ UI/ –

+0

另外,你认为是最好的用户体验设计,让谁属于这两个组的用户创建他们可以定义这些优惠券的新特性。当我根据用户类型限制访问权限时,他们是否需要切换其类型?我觉得我希望他们能够在登录后切换标签并查看相应的广告资源。但话又说回来问题是每张赠券应只属于一个组我怎样才能在控制器中的所有数据,这样我可以在视图里面不同的标签显示它。 –

+0

其中用户已经是用来确定他们是否可以执行的操作的许多角色,我会用一个角色系统。你可以通过使用Rolify和Pundit来简单地构建它。 – max

相关问题