2016-08-04 8 views
0

ユーザーは投稿を作成できます。また、プロフィール画像を追加(および更新)することもできます。Ruby:ユーザーがプロフィール画像を更新したときに投稿を自動的に作成

しかし、これをさらに進めたいと思います。ユーザーがプロフィール写真を更新すると、ユーザーは自動的に「ユーザー名がプロフィール画像を更新しました」という投稿を作成し、下の画像を表示します。私はRubyとRuby on Railsのために新しいです

は、私は約1ヶ月前学び始めたので、私は間違っているかもしれないが、私のような、私はif文でこれを達成できることを考えていた:

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

何を入力すればいいのかわからないので、私はコメントしました。しかし、もっと知識のある人が私(そしてコミュニティ)にこれを達成する方法を導くことができることを知っています。

+0

あなたはポストのようなソーシャルネットワーキングを作っていますか?他のユーザーに通知したいですか? –

+0

はい。私はソーシャルネットワークを作っています。私は、ルビーが自分のプロフィール画像を更新するときに自動的にユーザーの投稿を作成したいと思っています。その投稿は投稿/インデックスページに表示されます – GVS

+0

保存するアクティビティや保存するアバターのモデルの名前は何ですか?それらとユーザーの関係を教えてください –

答えて

2

Userモデルでafter_updateコールバックを試してみてください。これにより、ユーザーのアバターが正常に更新されるたびに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 
+0

イメージを更新した後、私はユーザープロファイルにアクセスしようとしましたが、このエラーが発生しました: 'Routing error:未定義メソッド' after_update 'for UsersController:Classどういう意味ですか? after_filter' – GVS

+0

あなたのモデルではなく、あなたのモデルに 'after_update'を入れる必要があります。コントローラを可能な限りスキニーにしてください。あなたの唯一の属性であれば 'description'の後にカンマを削除してください – Canh

関連する問題