0
我有一个STI表(Vote
),其中有许多子项(Tag::Vote
,User::Vote
,Group::Vote
等)。所有的孩子类共享,看起来像这样一个非常类似的方法:Rails:获取父类方法中子类的类名称
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
从一类到下一个唯一的区别是在第二行,当我指的是孩子的班级名称:
vote = Tag::Vote.where. . . .
我想重构这个方法到父类中。当我更换二线它几乎工程:
vote = self.where. . . .
这里的问题是,self
指Vote
,而不是Tag::Vote
或User::Vote
。反过来,type
列(Rails自动填充子类名称)设置为零,因为它来自Vote
而不是其中一个子项。
是否有一种方法让子类继承此方法并调用它自己,而不是它的父类?
这是一个明显的改进。 – nullnullnull 2013-04-22 15:40:15