Ruby on rails Rails单表继承、params和PUT到基类

Ruby on rails Rails单表继承、params和PUT到基类,ruby-on-rails,activerecord,params,single-table-inheritance,Ruby On Rails,Activerecord,Params,Single Table Inheritance,我有两个类“Person”和“Group”,它们通过Rails单表继承模式从基类“Entity”派生而来。这种模式使我的很多代码都干涸了 实体本身没有关系(例如有很多),但个人和团体有其特定的关系 继续简化代码的过程,对person或group对象的任何更改都将针对/entities/:id进行,从而触发更新操作 输入问题:Rails使用attr_accessible和类必须构建params[:entity]对象的关系。由于我可能放置的某些东西(如操作符_属性,特定于组)只出现在组中,而不出现在

我有两个类“Person”和“Group”,它们通过Rails单表继承模式从基类“Entity”派生而来。这种模式使我的很多代码都干涸了

实体本身没有关系(例如有很多),但个人和团体有其特定的关系

继续简化代码的过程,对person或group对象的任何更改都将针对/entities/:id进行,从而触发更新操作

输入问题:Rails使用attr_accessible和类必须构建params[:entity]对象的关系。由于我可能放置的某些东西(如操作符_属性,特定于组)只出现在组中,而不出现在实体中,所以Rails不在params[:Entity]中包含这些内容


我如何在仍然使用实体控制器的情况下解决这个问题,而不必重写Rails逻辑来构建参数[:Entity]?

我遇到了同样的问题。我的子类模型表现得非常不同,以至于我最终创建了精简控制器来配合精简模型。它们各自有不同的验证要求。我不能在
PUT
期间创建一个通用实体对象并设置
type
属性。我必须创建一个合适的对象

很明显,那不是你想要的那么干,而且也不是给我的。但在我的例子中,我仍然在管理面板中使用实体控制器/模型,这样我就可以显示条目并进行基本报告。在面向用户的一侧,它们是分开的,实体受到保护。它们在不同的语境中使用,具有不同的逻辑和观点。所以对我来说,为每个子类模型使用单独的控制器和视图是正确的决定


STI为我做的主要事情是干掉我的数据库和模型。如果继承的模型的行为和显示方式相同,则更容易干涸。希望这在某种程度上有所帮助。

我通过禁用EntityController的wrap_参数,并在客户端的原始PUT请求中创建根实体键,最终解决了这个问题

如果模型上存在“attribute_names”方法,它将调用该方法,因此我认为基本实体模型可以使用.constantize()或其他方法来确定正确执行的操作

最好的解决方案是使用wrap_参数以编程方式重新初始化params散列。看起来这几乎是可能的:您可以更改wrap_参数,但我还不知道如何重新处理这些参数

见: