ActiveRecord:通过父级验证继承的类

时间:2014-06-18 04:58:12

标签: ruby-on-rails validation activerecord

我有一个activerecord模型,Connection,它继承了SSH,S3,Local等模型。我在这些子模型中有不同的状态验证。

在我看来,我有一个"类型"连接类型的下拉列表,根据所选类型显示/隐藏不同的字段。保存后,控制器将参数保存为连接类型模型。

问题在于,当在父(Connection)类的实例上运行save方法时,不会检查相关的子验证,尽管" type"被设定为必要的价值。

我可以通过一个开关来解决这个问题,该开关根据" type"的值来保存模型的新实例,但不知何故看起来不那么优雅。 ...那么,是否有一种更优雅的方法可以确保当我的Connection模型保存时值为(让我们说)' SSH'对于类型,' SSH'验证在该模型上运行?

1 个答案:

答案 0 :(得分:1)

您可以尝试使用becomes方法

instance.becomes(OtherObject)

它返回指定' klass'的实例。具有当前记录的属性。

http://apidock.com/rails/ActiveRecord/Persistence/becomes

比开关更优雅。

另一个想法是,调用正确的控制器 - 动态更改表单的URL。