Ruby:当用户更新个人资料图片时自动创建帖子

时间:2016-08-04 23:50:00

标签: ruby-on-rails ruby

用户可以创建帖子。他们还可以添加(和更新)他们的个人资料图片。

但我想更进一步。当用户更新其个人资料图片时,我希望用户自动创建一个帖子,其中显示"用户名更新了他们的个人资料图片"并显示下面的图像。

我是ruby和ruby在轨道上的新手,我在1个月前开始学习,所以我可能错了,但我想我可以用if语句实现这一点,例如:

if @user.avatar.save do
    #Post automated post
end

我评论说因为我不知道要输入什么。但我知道有更多知识的人可以指导我(以及社区)如何实现这一目标。

1 个答案:

答案 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