Vote
多くの子 ( Tag::Vote
、User::Vote
、など)を持つ STI テーブル ( ) がありGroup::Vote
ます。すべての子クラスは、次のような非常によく似たメソッドを共有しています。
def self.cast_vote(params)
value = params[:value]
vote = Tag::Vote.where(:user_id => User.current.id,
:voteable_type => params[:voteable_type],
:voteable_id => params[:voteable_id]).first_or_create(:value => value)
Vote.create_update_or_destroy_vote(vote, value)
end
あるクラスから次のクラスへの唯一の違いは、子のクラス名を参照するときの 2 行目です。
vote = Tag::Vote.where. . . .
このメソッドを親クラスにリファクタリングしたいと思います。2行目を次のように置き換えると、ほとんど機能します。
vote = self.where. . . .
ここでの問題は、またはではなくをself
参照することです。次に、列 (Rails が子のクラス名を自動入力する) が nil に設定されます。これは、列が子の1 つではなく、1 つから来ているためです。Vote
Tag::Vote
User::Vote
type
Vote
子クラスがこのメソッドを継承し、親ではなく自分自身を呼び出す方法はありますか?