2017-08-09 5 views
1

私は、ユーザが質問、回答、およびコメントを作成できる反応クライアントを使用して、rails 4.1に関する質問と回答のフォーラムを持っています。私は、アクティブなモデルのシリアライザを使用して、すべてのユーザアクティビティ(タイプに関係なく)を渡したいと思います。理想的には、これはcreated_atでソートされたオブジェクトの配列でなければなりません。私は配列を作成することができますが、プッシュメソッドは互いに上書きします。レールにユーザ所有のオブジェクトを結合する

個々のオブジェクト配列内にネストされた属性を使って作業するという迷路を避けるために、実際にハッシュを使用する必要があるかもしれませんが、少しのガイダンスが必要です。これは理にかなっていない場合は

は、Facebookがあなたの最近の活動を示す考える:noobの質問のための

def user_activity 
    activity = [] 

    self.object.questions.each do |question| 
    activity.push(question) 
    end 

    self.object.answers.each do |answer| 
    activity.push(answer) 
    end 

    self.object.comments.each do |comment| 
    activity.push(comment) 
    end 

end 

感謝と申し訳ありません:

[ 
    "You posted 'It's my birthday!' on 08/04/2017", 
    "You liked Tammy's post on 8/3/2017", 
    "You commented on Rihanna Tweets as Motivational Posters page on 8/1/2017" 
] 

user_activity方法。

+0

あなたの 'user_activity'は最後に' activity'配列を返さなければなりません - また、私はAM :: Serializerを使うのは、文字列を出力したいだけで、オブジェクト、ハッシュのように)。このユーザー活動互換(=文字列)出力を必要とするすべてのモデルに含まれる単純なモジュールで十分です。私はこれを達成するための例を提供することができます – MrYoshiji

+0

Woot!ありがとう@MrYoshiji。私はそれが私が忘れていた何かばかなものであることを知っていた。期待通りに働いた!ありがとう! –

+0

私はこの時点でAMSと結婚していると思っていますが、余分な情報は気にしません。私たちは実際に非ユーザオブジェクト内の多くのレコードをシリアライズしています。 –

答えて

0

モジュールの実装:

module UserActivityOutputer 
    def output_for_user_activity 
    raise NotImplementedError, "You must implement `#{self.class}##{__method__}`" 
    end 
end 

モジュールを含める:

class Post 
    include UserActivityOutputer 
    def title ; 'combining user owned objects in rails' ; end # only here for easy copy-paste test in IRB 
    def created_at ; DateTime.now ; end # only here for easy copy-paste test in IRB 

    def output_for_user_activity 
    "You posted '#{self.title}' on #{I18n.l(self.created_at.to_date)}" 
    end 
end 

class SomeModel 
    include UserActivityOutputer 
    # did not implement output_for_user_activity method for example purpose 
end 

使用法:

Post.new.output_for_user_activity 
# => "You posted 'combining user owned objects in rails' on 2017-08-09" 
SomeModel.new.output_for_user_activity 
# => NotImplementedError: You must implement `SomeModel#output_for_user_activity` 
あなたは新鮮に開かれたIRBコンソールにここに提示したコードのすべてをコピー&ペーストすることができます

(既存のPostまたはSomeModelクラスを再定義する可能性があります)、outp ut。

これは、「このレコードに出力する内容」を定義することを目的とした非常に基本的な実装です。それは他の場所で行われる並べ替えをサポートしていません。

+0

確かに。なぜあなたがAMSを使うよりもこれを好むのか不思議です。シリアライザを通して他のすべてを渡しています。クライアントのこの「アクティビティリスト」だけを使用しています。それは、ユーザーモデルまたはそれに類するものに別の列として保持されません。 –

関連する問題