У меня есть две модели: Скидка есть и принадлежит многим Businsses.
Я хочу подтвердить, что у Дисконта всегда есть хотя бы один бизнес вместе с другим условием (например, active?
). Я попробовал следующее:
class Discount < ActiveRecord::Base
has_and_belongs_to_many :businesses,
before_remove: :validate_publish_status
def validate_publish_status(*arg)
if active? && businesses.count == 0
errors[:active] << 'discount with no business'
end
end
end
Однако это не работает (ошибок проверки не возникало), и я понял, что это, вероятно, потому, что это всего лишь обратный вызов, а не проверка. Как я могу кодировать его, чтобы я мог использовать errors
, как я делаю пользовательскую проверку?
Действие контроллера у меня (для ajax):
def remove
@business = Business.find(params[:business_id])
if @business.in? @discount.businesses
@discount.businesses.delete(@business)
end
render json: @business.as_json(only: [:id, :type, :name, :address],
methods: [:city_name, :country_name]).
merge(paths: paths_for(@discount, @business))
rescue ActiveRecord::RecordInvalid # even tried the generic Exception
respond_to do |f|
f.json { render json: {error: $!.message}, status: 403 }
end
end