2016-08-04 5 views
0

Benutzer haben die Möglichkeit, Beiträge zu erstellen. Sie können auch ihr Profilbild hinzufügen (und aktualisieren).Ruby: Erstellen Sie automatisch einen Beitrag, wenn der Benutzer Profilbild aktualisiert

Aber ich möchte einen Schritt weiter gehen. Wenn ein Benutzer sein Profilbild aktualisiert, möchte ich, dass der Benutzer automatisch einen Beitrag erstellt, der besagt, dass "Benutzername sein Profilbild aktualisiert" hat, und das Bild unten anzeigt.

Ich bin neu in Ruby und Ruby on Rails, begann ich vor etwa 1 Monat zu lernen, so könnte ich falsch sein, aber ich dachte, dass ich dies mit einem if-Anweisung erreichen könnte, wie zum Beispiel:

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

Ich kommentiert, weil ich keine Ahnung habe, was ich tippen soll. Aber ich weiß, dass jemand mit mehr Wissen mich (und die Gemeinschaft) darüber führen könnte, wie man das erreicht.

+0

Machen Sie soziale Netzwerke wie Post. Und möchten andere Nutzer benachrichtigen? –

+0

Ja. Ich erstelle ein soziales Netzwerk. Ich möchte Ruby automatisch einen Beitrag für einen Benutzer erstellen, wenn sie ihr Profilbild aktualisieren. Dieser Beitrag wird auf meiner Posts/Index Seite angezeigt. – GVS

+0

Was ist der Name des Modells für Aktivität zu speichern und Avatar zu speichern? und erzähle mir die Beziehung zwischen ihnen und Benutzer –

Antwort

2

Sie können versuchen, after_update Rückruf in Ihrem User Modell zu verwenden. Dies ruft create_avatar_post Methode jedes Mal Benutzer Avatar ist erfolgreich aktualisiert:

# 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

Nach dem Aktualisieren des Bildes, habe ich versucht, Benutzerprofil zu besuchen und habe diesen Fehler: 'Routing-Fehler: undefinierte Methode' after_update 'für UsersController: Klasse Meinten Sie? after_filter' – GVS

+0

Sie müssen 'after_update' in Ihr Modell einfügen, nicht in Ihren Controller. Machen Sie Ihren Controller so dünn wie möglich. Und entfernen Sie das Komma nach der Beschreibung, wenn es Ihr einziges Attribut ist – Canh