has_many关联中{x 44}个对象的唯一记录

时间:2016-01-26 23:22:10

标签: ruby-on-rails validation unique has-many

我有以下型号

class Acceptance < ActiveRecord::Base
  belongs_to :user
  belongs_to :requested_favor
  belongs_to :offered_favor
end

class RequestedFavor < Favor 
  has_many :acceptances, foreign_key: 'favor_id'
end

class OfferedFavor < Favor
  has_many :acceptances, foreign_key: 'favor_id'
end

多个用户可以向特定acceptance对象发送favor请求。 acceptance具有布尔accepted属性。

我需要的是,当acceptance的{​​{1}}设置为accepted时,其他true对象不能设置为acceptance。我想是一种验证或单一性。我尽力清楚地解释情况:)

如何实现这一目标?非常感谢你的时间!

1 个答案:

答案 0 :(得分:1)

解决此问题的最基本方法是在保存接受之前进行检查,并确保&#34; OfferedFavor&#34;它所属的实例还没有任何其他的&#34;被接受的&#34;承兑汇票。在您的验收模型中,检查看起来像这样:

offered_favor.acceptances.where(accepted: true).count > 0

希望这有帮助!