Rails 5.1依赖于另一个对象验证对象

时间:2017-10-26 20:19:21

标签: ruby-on-rails ruby

我有两个模型构建和列表。 Listing模型属于Building。我们一直试图限制可以在列表中创建的记录数量,具体取决于给定时间的活动列表记录的数量,例如Listing.active.count永远不会超过X.我们尝试使用验证,如果将Building中的整数列用作限制,但它无效并且收到以下错误,

undefined method `>=' for #<Array:0x007f05ec4db388>

Listing.rb

Class Listing < Application Record
  validates :validate_listing_count, on :create   

  private
    def validate_listing_count
      errors.add(:base, "You have too many active listings, please destroy a listing or contact your Account Manager if you need more listings") unless too_many_siblings?
    end

    def active_siblings
      building.listings.where(active: true)
    end

    def too_many_siblings?
      active_siblings.select { |sib| sib.id != id } >= (building.listing_limit - 1)
    end
end

1 个答案:

答案 0 :(得分:1)

active_siblings.select返回一个数组,你想要数组中的项目数。试试这个:

def too_many_siblings?
  active_siblings.select { |sib| sib.id != id }.count >= (building.listing_limit - 1)
end

这可能不是问题的一部分,您可能希望将unless更改为if中的validate_listing_count。我认为根据你对问题的描述更合乎逻辑。

相关问题