Rails基于多态类型的条件验证

时间:2012-01-19 19:39:03

标签: ruby-on-rails-3 validation inheritance devise polymorphism

我正在使用Rails多态继承配置 - 我有以下设置:

User < ActiveRecord::Base
belongs_to :rolable, :polymorphic => true

Student < ActiveRecord::Base
has_one :user, :as => :rolable
accepts_nested_attributes_for :user

Teacher < ActiveRecord::Base
has_one :user, :as => :rolable
accepts_nested_attributes_for :user

我希望能够捕获教师的电子邮件地址和学生的用户名(他们通常没有电子邮件地址)。我将这些定义为用户模型的属性,但是当我尝试为学生和教师进行验证时,我现在陷入了困境。我没有在各自的模型中定义它们,因为我使用的是Devise,还有其他用户类型。将角色模式的当前类型抽象出来并不适合我的特定场景。

由于用户名和电子邮件是User的属性,我基本上想要做的是检查多态关系中的rolable_type字段是否为type student,如果是,请输入username并发送电子邮件,但是在新方法中属性是&n&# 39; t set。然而Rails&#39;知道&#39;这是一个学生,所以感觉就像检查实例类型一样。我发现的最接近的链接是我在此问题中接受的答案的第三条评论:How to apply different validation rule according to polymorphic association type (Rails)?,但我无法将method_missing语法设置为正确我对元编程没有经验。我是否在正确的轨道上?或者有更简单的方法吗?或者我应该将属性移动到多态模型吗?

0 个答案:

没有答案