Я хочу выполнить установку / исправление для следующего маршрута, который, в свою очередь, вызывает контроллер баров и вызывает его метод update_premium: put '/bar/premium', to: 'bars#update_premium'
Однако этот метод должен вызывать проверку валидации в самой модели всякий раз, когда .save или .valid? /. valid вызывается.
bar.rb
class Bar < ApplicationRecord
belongs_to :city
validate :validate_premium_bars, on: :create
validate :validate_premium_bars, on: :update_premium
def allow
@allow_change = true
end
private
def validate_premium_bars
return unless self.city
unless @allow_change
if self.city.bars.where(:is_premium => true).count >= 5
errors.add("...")
end
end
end
end
bars_controller.rb
def update_premium
@bar = Bar.find(params[:id])
if @bar.save
...
else
render json: @bar.errors.full_messages, status: 400
end
end
Это работает, когда я использую on: :update
однако специальный метод в контроллере, такой как on: :update_premium
, не работает вместе с символом «on:».
Как я могу решить эту проблему? Я хочу сохранить метод обновления в контроллере для реального полного обновления модели, а не только для запуска одного атрибута модели.