nee*_*zer 15 validation model ruby-on-rails-3
我有一个带有active列的模型,它是一个布尔值.我想验证所有新添加的记录的唯一性company_id,这样我就可以根据需要添加任意数量的记录,company_id只要active设置为false.active每个应该只有一个记录company_id.
我怎么写这个?我已经尝试过了:
validates :company_id, :uniqueness => { :scope => :active }
Run Code Online (Sandbox Code Playgroud)
但是,这似乎也验证对独特的组合active是false(例如,我永远不可能有两个以上company_id表中的具有相同active的地位,不管是什么active是) -验证上述允许两个记录company_id,一个与active = false和其他的active = true.一旦这两个记录进入,验证就会阻止其他所有记录.
然后我尝试添加这个:
scope :active, where(:active => true)
Run Code Online (Sandbox Code Playgroud)
但这似乎没有改变验证(与上面相同的问题).
我怎么能写这样的验证,这样我可以用相同的添加尽可能多的记录company_id,只要active是假的,只允许一个active = true每company_id?
sma*_*thy 15
无需使用validates_each- 仅当您想要通过同一个块传递多个属性时.只需创建自定义验证:
validate :company_id_when_active
def company_id_when_active
if active? and CompanyTerm.exists? ["company_id = ? AND active = 1 AND id != ?", company_id, id.to_i]
errors.add( :company_id, 'already has an active term')
end
end
Run Code Online (Sandbox Code Playgroud)
Rails 4+为此提供了更好的解决方案.
validates_uniqueness_of :company_id, conditions: -> { where(active: true) }
Run Code Online (Sandbox Code Playgroud)
查看文档
| 归档时间: |
|
| 查看次数: |
8902 次 |
| 最近记录: |