我们有一个ActiveRecord模型,其列具有一些默认值。它也有一个验证条件,如果'profile'属性被设置为一个不同的值,那么默认值是无效的。是否可以确定是否设置了ActiveRecord属性,而不是默认设置?
我希望能够确定是否已将属性设置为,因为它们被设置为默认,以便我可以在验证之前将它们重置为新的有效值。
这可能吗?
更新:我不清楚我的意思,所以我应该给代码示例。
表的定义是这样的:
t.column :profile, :string
t.column :contact_by, :string, :default => "phone", :null => false
验证是这样的:
validate :validate_contact_by_for_profile1
def validate_contact_by
if (profile == "profile1") && (contact_by != "email")
errors.add(:contact_by, " must be 'email' for users in profile1")
end
end
因此,任何时候我们这样做:
u = User.new
u.profile => profile1
我们结束了u
无效。我最终想要的是用户的contact_by默认为“电话”,但如果他们的个人资料被设置为profile1,那么它将更改为“电子邮件”,除非在此期间已将其设置为某种内容。 (理想情况下这包括将其设置为“手机”)
如何这些默认值设定?在保存之前,您可以确定是否更改了值,但这取决于您如何设置默认值。它不应该在gui方面解决吗?选择不同的配置文件,字段应该变为空/重置? – nathanvda 2010-06-22 16:25:47
默认值来自数据库中的表格。gui-side解决方案在单元测试中不会帮助我。 – Simon 2010-06-22 16:27:32