「has_many through」関係を置き換えるために、Redis を Rails アプリに統合しようとしています。アプリ全体でコードを変更する必要がないように、シームレスに行いたいと思います。私の考えは、いくつかのクラス属性 (たとえば、Speaker クラスのフォロワー属性) のさまざまなメソッドをオーバーライドして、それらを使用するときにカスタム動作を作成できるようにすることです。
s = Speaker.new
s.followers # calls custom getter and returns [User1, User2]
s.followers << User.create
s.followers # calls custom getter and returns [User1, User2, User3]
これは、 Ruby でインスタンス変数配列の演算子をオーバーライドすることに触発された私のアイデアです。
class Speaker < ActiveRecord::Base
attr_accessor :followers
def initialize
super
@followers = []
class << @followers
def <<(u)
puts "setter #{u.id}"
$redis.set "speaker#{self.id}followers", u.id
super(u.id)
end
end
end
def followers
puts "getter"
user_ids = $redis.get "speaker#{self.id}followers"
User.find_all user_ids
end
end
問題は、フォロワーゲッターの実装が「def <<(val)」の実装をオーバーライドすることです。
ゲッター「def follower」が定義されていない場合:
s.followers
# []
s.followers << User.create
# "setter 1"
# [1]
s.followers
# [1]
s.followers << User.create
# "setter 2"
# [1, 2]
s.followers
# [1, 2]
ゲッター「def attendees」が定義されている場合:
s.followers << User.create
# ["My", "Custom", "Array", User1]
s.followers
# ["My", "Custom", "Array"]
s.followers << User.create
# ["My", "Custom", "Array", User2]
s.followers
# ["My", "Custom", "Array"]
ゲッターとセッター「<<」を連携させるにはどうすればよいですか?