用户可以创建帖子。他们还可以添加(和更新)他们的个人资料图片。
但我想更进一步。当用户更新其个人资料图片时,我希望用户自动创建一个帖子,其中显示"用户名更新了他们的个人资料图片"并显示下面的图像。
我是ruby和ruby在轨道上的新手,我在1个月前开始学习,所以我可能错了,但我想我可以用if语句实现这一点,例如:
if @user.avatar.save do
#Post automated post
end
我评论说因为我不知道要输入什么。但我知道有更多知识的人可以指导我(以及社区)如何实现这一目标。
答案 0 :(得分:2)
您可以尝试在after_update
模型中使用User
回调。每次成功更新用户头像时,都会调用create_avatar_post
方法:
# This is in your user.rb file
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :posts, dependent: :destroy
has_many :likes, dependent: :destroy
has_many :liked_posts, through: :likes, source: :post
validates_uniqueness_of :username
has_attached_file :avatar, styles: { large: "800x800>", medium: "300x300>", thumb: "50x50>" }, default_url: "/assets/missing-user.png"
validates_attachment_content_type :avatar, content_type: /\Aimage\/.*\Z/
after_update :create_avatar_post, if: :avatar_changed?
def create_avatar_post
Post.create(
description: "#{username} update their profile picture",
user_id: id
# Whatever other attributes of Post
)
end
end