読者です 読者をやめる 読者になる 読者になる

リア充爆発日記

You don't even know what ria-ju really is.

unread gemとpublic_activity gemを組み合わせて使う

ハラが減ってるので、差分の作業だけメモっていく。

unreadは既読、未読的なやつができる。
public_activityは「○○から☓☓にいいね!がありました」みたいなやつができる。

この2つを組み合わせて、「○○から☓☓にいいね!がありました」が未読から既読にできるようにする。

それぞれのgemのことはそれぞれのギッハブに書いてあるからつぶさに読め。
https://github.com/pokonski/public_activity
https://github.com/ledermann/unread

手順的にはpublic_activityを導入してから、そのactivityに対してunreadを絡ませることになる。
そこで最初に困るのが、gemなんでunreadのacts_as_readableを書く場所がない、ということなんだけど
これは、元クラスを継承したクラスを作れば解決する。

models/activity.rb

class Activity < PublicActivity::Activity
  acts_as_readable on: :created_at
  belongs_to :user
end

その次に困るのが、unreadが管理対象クラスを今作ったActivityじゃなくてPublicActivity::Activityにしちゃうので、これをなんとかする。
元ネタ:http://stackoverflow.com/questions/9535093/using-gem-unread-with-public-activity

具体的には以下の様なイニシャライザを作る。
config/initializers/activity_unread.rb

PublicActivity::Activity.module_eval do
  acts_as_readable on: :created_at
end

こうするとreadble_typeがPublicActivity::ORM::ActiveRecord::Activityになるため、今度はDBの長さ制限に引っかかってしまう。ので、migrationファイルを修正する。

~snip~
      t.string   :readable_type, :null => false, :limit => 50
~snip~

ちなみに

irb(main):009:0> 'PublicActivity::ORM::ActiveRecord::Activity'.size
=> 43

これで動くようになる。イェイ。