如何根据Rails 3.2中的列验证关联?

时间:2012-03-06 21:16:10

标签: ruby-on-rails-3 associations

假设我有一个包含两列的assets模型:

Assets
    ownership:string
    lease_id:integer   # My Lease Object

所以ownership可以是“OWN”或“LEASE”。

现在,我只想允许lease_id如果所有权为LEASE且所有权恰好为LEASE,那么我想要一个租约对象。

如何在Rails 3.2.2中完成?

1 个答案:

答案 0 :(得分:1)

您可以根据返回true / false的方法添加可选验证。请注意,这只会强制lease_id时出现ownership == "LEASE"。这不会限制在任何情况下添加lease_id

class Asset < ActiveRecord::Base
  validates :lease_id, presence: { :if => :lease? }

  def lease?
    self.ownership == "LEASE"
  end
end

如果要完全限制lease_id,可以在将对象保存到数据库之前使用回调删除属性。

class Asset < ActiveRecord::Base
  before_create :restrict_lease_id

  def restrict_lease_id
    lease_id = nil if self.ownership == "LEASE"
  end
end