我有兩個模型的Rails 4應用程序。如何驗證子記錄的數量?
class User
has_many :bids
end
class Bid
belongs_to :user
end
用戶只能每週創建一個投標,所以我增加了以下至投標表
add_column :bids, :expiry, :datetime, default: DateTime.current.end_of_week
及以下範圍至投標模型
scope :default, -> { order('bids.created_at DESC') }
scope :active, -> { default.where('expiry > ?', Date.today) }
我可以現在阻止用戶在控制器級別創建多個出價,如下所示:
class BidsController
def new
if current_user.bids.active.any?
flash[:notice] = "You already have an active Bid. You can edit it here."
redirect_to edit_bid_path(current_user.bids.active.last)
else
@bid = Bid.new
respond_with(@bid)
end
end
end
但是在模型層面驗證這一點的最佳方法是什麼?
我一直在嘗試設置自定義驗證,但我一直在努力查看最佳方法來設置此值,以使current_user可用於該方法。另外,我是否將錯誤添加到正確的對象?
class Bid
validate :validates_number_of_active_bids
def validates_number_of_active_bids
if Bid.active.where(user_id: current_user).any?
errors.add(:bid, "too much")
end
end
end