Ruby on rails Ruby:当用户更新配置文件图片时自动创建帖子

Ruby on rails Ruby:当用户更新配置文件图片时自动创建帖子,ruby-on-rails,ruby,Ruby On Rails,Ruby,用户可以创建帖子。他们还可以添加(和更新)他们的个人资料图片 但我想更进一步。当用户更新他们的个人资料图片时,我希望用户自动创建一个帖子,上面写着“Username更新了他们的个人资料图片”,并显示下面的图片 我是ruby和RubyonRails的新手,大约1个月前我开始学习,所以我可能错了,但我想我可以通过一个if语句来实现这一点,比如: if @user.avatar.save do #Post automated post end 我发表评论是因为我不知道该键入什么。但我知道,有

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

但我想更进一步。当用户更新他们的个人资料图片时,我希望用户自动创建一个帖子,上面写着“Username更新了他们的个人资料图片”,并显示下面的图片

我是ruby和RubyonRails的新手,大约1个月前我开始学习,所以我可能错了,但我想我可以通过一个if语句来实现这一点,比如:

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

我发表评论是因为我不知道该键入什么。但我知道,有更多知识的人可以指导我(和社区)如何实现这一目标。

您可以尝试在
用户
模型中使用
更新后回叫。每次成功更新用户化身时,将调用
create\u avatar\u 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
#这在user.rb文件中
类用户<应用程序记录
#包括默认设计模块。其他可供选择的项目包括:
#:可确认、:可锁定、:超时和:全授权
设计:数据库可验证,可注册,
:可恢复,:可记忆,:可跟踪,:可验证
有很多:帖子,依赖::销毁
有很多:喜欢、依赖、破坏
有很多:喜欢的帖子,通过::喜欢,来源::帖子
验证用户名的唯一性
已附加文件:头像,样式:{large:“800x800>”,medium:“300x300>”,thumb:“50x50>”},默认url:“/assets/missing user.png”
验证附件内容类型:头像,内容类型:/\Aimage\/.\Z/
更新后:创建阿凡达帖子,如果::阿凡达改变了?
def创建_头像_帖子
Post.create(
描述:“#{username}更新他们的个人资料图片”,
用户id:id
#邮政的任何其他属性
)
结束
结束

您可以在您的
用户
模型中尝试使用更新后的
回调。每次成功更新用户化身时,将调用
create\u avatar\u 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
#这在user.rb文件中
类用户<应用程序记录
#包括默认设计模块。其他可供选择的项目包括:
#:可确认、:可锁定、:超时和:全授权
设计:数据库可验证,可注册,
:可恢复,:可记忆,:可跟踪,:可验证
有很多:帖子,依赖::销毁
有很多:喜欢、依赖、破坏
有很多:喜欢的帖子,通过::喜欢,来源::帖子
验证用户名的唯一性
已附加文件:头像,样式:{large:“800x800>”,medium:“300x300>”,thumb:“50x50>”},默认url:“/assets/missing user.png”
验证附件内容类型:头像,内容类型:/\Aimage\/.\Z/
更新后:创建阿凡达帖子,如果::阿凡达改变了?
def创建_头像_帖子
Post.create(
描述:“#{username}更新他们的个人资料图片”,
用户id:id
#邮政的任何其他属性
)
结束
结束

您是否正在制作类似post的社交网络。想通知其他用户吗?是的。我正在创建一个社交网络。我希望ruby在用户更新其个人资料图片时自动为其创建帖子。该帖子将显示在我的帖子/索引页面上要保存的活动和头像的模型名称是什么?告诉我它们和用户之间的关系,我会添加它们。一分钟,我会编辑这篇文章。你用回形针作为文件附件吗?如果没有,图片是如何上传并附加到用户对象上的?你是否在制作类似post的社交网络。想通知其他用户吗?是的。我正在创建一个社交网络。我希望ruby在用户更新其个人资料图片时自动为其创建帖子。该帖子将显示在我的帖子/索引页面上要保存的活动和头像的模型名称是什么?告诉我它们和用户之间的关系,我会添加它们。一分钟,我会编辑这篇文章。你用回形针作为文件附件吗?如果没有,图像是如何上传和附加到用户对象的?更新图像后,我试图访问用户配置文件,但出现了以下错误:
Routing error:undefined method
After\u update'for users controller:Class你是指什么?after_filter`您需要在您的模型(而不是控制器)中的
更新后添加
。让你的控制器尽可能的瘦。并删除
说明
后的逗号,如果它是您唯一的属性更新图像后,我试图访问用户配置文件,但出现以下错误:
路由错误:用户更新后未定义方法
控件:类您的意思是什么?after_filter`您需要在您的模型(而不是控制器)中的
更新后添加
。让你的控制器尽可能的瘦。并删除
描述
后的逗号(如果它是您唯一的属性)