ruby-on-rails - 用户在控制器中创建对象后运行模型方法
问题描述
我正在寻求解决我面临的问题的帮助。我有一个推荐程序,我想在被推荐的用户创建一个Post
. 在我的user.rb
文件中,我有:
def complete_referral!
update(referral_completed_at: Time.zone.now)
end
我PostsController
有:
def create
@post = current_user.posts.build(post_params)
@post.save
end
我尝试过的一些想法是尝试运行 complete_referral!方法post.rb
如下:
after_create :complete_referral!
但这只是引发了一个undefined method complete_referral!' for #<Post:0x00007ff65b0514d8>
错误。
任何想法,将不胜感激。
解决方案
您还可以使用关联回调:
class Post < ApplicationRecord
belongs_to :referrer, class_name: 'User', optional: true
end
class User < ApplicationRecord
has_many :referred_posts,
class_name: 'Post',
foreign_key: 'referrer_id',
after_add: :complete_referral!
end
当您从关联创建帖子时,将调用回调:
@post = User.find(some_param).referred_posts.new(post_params)
我会使用它而不是常规回调的原因是它不会创建从 Post 到 User 的硬依赖关系,当你只想创建一个 post 记录时,你必须在所有测试中解决这个问题。
推荐阅读
- android - 升级到 Android Studio Artic Fox 和 AGP 7.0.0 后,自定义视图不再在 Layout Preview 中呈现
- c# - Xamarin Forms IOS Google Sheets API:找不到client_secret.json文件
- javascript - 防止 redux 将重复的商品添加到购物车
- javascript - Swiper 和 Javascript:使用外部按钮转到特定幻灯片
- java - 如何在 Java 中使用 filter() 从 arrayList 中过滤字符串日期范围?
- video - 如何使用 Azure 媒体服务对 mp4、OGG 格式的视频文件应用水印
- android - 拆分成模块后,Jenkins 中的 Android 构建速度太慢
- image - Flutter:如何选择和显示图像
- jupyter-notebook - 如何将两个单独的图表组合成一个图表 Jupyter Notebook
- reactjs - 创建反应应用程序时不断出现相同的错误