Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在rails中,如何允许在运行时创建新类和模型_Ruby On Rails_Ruby_Class_Oop_Anonymous - Fatal编程技术网

Ruby on rails 在rails中,如何允许在运行时创建新类和模型

Ruby on rails 在rails中,如何允许在运行时创建新类和模型,ruby-on-rails,ruby,class,oop,anonymous,Ruby On Rails,Ruby,Class,Oop,Anonymous,我现在正在为我的公司产品开发rails应用程序,我面临一个设计问题。我的应用程序允许创建两个类,它们是父类的子类 class Coupon include Commonelements end class ServiceCenterCoupon < Coupon end class DealershipCoupon < Coupon end 我想让管理员用户能够在运行时创建新的优惠券类型。比如说,有人想创建RepairShopCouples类我需要对视图进行哪些更改,例如添

我现在正在为我的公司产品开发rails应用程序,我面临一个设计问题。我的应用程序允许创建两个类,它们是父类的子类

class Coupon
  include Commonelements
end

class ServiceCenterCoupon < Coupon
end

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

我确实理解使用

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的最佳方法是什么,以便多个组的用户能够在每个库存之间切换?在这种情况下,用户体验设计的专业行业标准是什么


非常感谢您的帮助。

让应用程序的用户在运行时生成代码是一个非常糟糕的主意,因为潜在的bug和漏洞数量令人难以置信,因为您基本上允许在运行时将未经测试的代码注入应用程序

它还会破坏应用程序中任何基于类的缓存

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

首先,你可能并不需要为每种“类型”的优惠券设置不同的课程。你需要考虑每个类的逻辑是否有很大不同。

您可能只需创建一个与发行人(dealship或service center)的多态关联即可

班级优惠券<优惠券
属于:颁发者,多态性:true
结束
如果您希望避免多态性,而不是将其设置为标准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
班级优惠券
包含公共元素
结束
类别ServiceCenter优惠券<优惠券
self.table_name=‘优惠券’
属于:服务中心
结束
类别经销商分组<优惠券
self.table_name=‘优惠券’
属于:经销商
结束

让应用程序的用户在运行时生成代码是一个非常糟糕的主意,因为潜在的bug和漏洞数量令人难以置信,因为您基本上允许在运行时将未经测试的代码注入应用程序

它还会破坏应用程序中任何基于类的缓存

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

首先,你可能并不需要为每种“类型”的优惠券设置不同的课程。你需要考虑每个类的逻辑是否有很大不同。

您可能只需创建一个与发行人(dealship或service center)的多态关联即可

班级优惠券<优惠券
属于:颁发者,多态性:true
结束
如果您希望避免多态性,而不是将其设置为标准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
班级优惠券
包含公共元素
结束
类别ServiceCenter优惠券<优惠券
self.table_name=‘优惠券’
属于:服务中心
结束
类别经销商分组<优惠券
self.table_name=‘优惠券’
属于:经销商
结束

酷!优惠券是子类,因为它们在其他方面有所不同。优惠券类是抽象的,只有子类实现各自的上传器。这就是我要使用的架构。如果我只创建优惠券类的实例,我就不能为每种类型创建不同的表。每个使用此应用程序的内部运营团队人员将只管理一种优惠券的库存。我的主要问题是,用户如何在运行时通过用户视图创建新类型的优惠券。就像他们可以在通过view/UI/创建优惠券时定义优惠券的新属性一样,您认为最好的用户体验设计是允许属于这两个组的用户使用优惠券。当我根据用户类型限制访问权限时,他们是否需要切换类型?我觉得我希望他们能够切换标签,一旦他们登录并看到各自的库存。但问题是,每个优惠券应该只属于一个组。我如何获取控制器中的所有数据,以便在内部的不同选项卡中显示它。我将使用角色系统,其中用户具有多个角色,用于确定他们是否可以执行某个操作。通过使用Rolify和Pundit,您可以非常简单地构建它。大多数具有多个用户类型的系统通常只是一个过于复杂的烂摊子。RBAC更加灵活和可扩展。酷!优惠券是子类,因为它们在其他方面有所不同。优惠券类是抽象的,只有子类实现各自的上传器。这就是我要使用的架构。如果我只创建优惠券类的实例,我就不能为每种类型创建不同的表。每个使用此应用程序的内部运营团队人员将只管理一种优惠券的库存。我的主要问题是,用户如何在运行时通过用户视图创建新类型的优惠券。锂
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