我有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种产品。我研究了谷歌,有人说我尝试使用回调,我认为这是正确的方法,但是它提出了两个问题:
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条记录,则将其删除。
答案 0 :(得分:0)
您有:
belongs_to :user, foreign_key: :user_id
在您的Favorite
模型中并且limit_records
是Favorite
上的实例方法。因此,您可以在self.user_id
内以user_id
的身份访问用户(或者由于隐含self
而只能访问limit_records
),并且不需要参数:
after_create :limit_records
def limit_records
# same as what you have now, `user_id` will be `self.user_id`
# now that there is no `user_id` argument...
count = self.where(user_id: user_id).count
self.where(used_id: user_id).last.delete if count > 10
end