У меня 2 модели: пользовательская и любимая. В модели Фаворит:
class Favorite < ApplicationRecord
belongs_to :user, foreign_key: :user_id
def self.add_favorite(options)
create!(options)
end
def self.unfavorite(options)
where(options).delete_all
end
Теперь я хочу ограничить количество записей, сохраняемых в Избранном, равным 10. Это означает, что пользователям понравились только 10 товаров. Я исследовал Google, кто-то сказал, что я пытаюсь использовать обратный вызов, и я думаю, что это правильный путь, но это поднимает 2 вопроса:
1. Могу ли я использовать запрос в методе для обратного вызова?
2. Обратный звонок можно передать аргументом?
Это пример кода, я думаю:
class Favorite < ApplicationRecord
after_create :limit_records(user_id)
belongs_to :user, foreign_key: :user_id
def self.add_favorite(options)
create!(options)
end
def self.unfavorite(options)
where(options).delete_all
end
def limit_records(user_id)
count = self.where(user_id: user_id).count
self.where(used_id: user_id).last.delete if count > 10
end
Если у пользователя есть 10 избранных, когда им нравятся какие-либо продукты, обратный вызов будет вызван после создания избранного и будет удален, если это 11-я запись.