我怎么能干掉下面的Rails代码? type
参数将对应于Rails范围,我假设all
也可以工作......但它返回一个数组,我的狡猾计划失败。
我if
看起来不对,但我无法弄清楚如何让all
范围正常工作;任何想法?
不恰当地依赖all
作为范围的原始代码:
def readable(type=:all)
StudyAid.send(type.to_s).authored_by(self)
end
工作但丑陋的版本:
def readable(type=:all)
if type == :all
StudyAid.authored_by(self)
else
StudyAid.send(type.to_s).authored_by(self)
end
end
答案 0 :(得分:1)
我不会尝试修改all
方法的行为,因为这可能会意外地改变代码其他部分的语义,并会让那些前来处理代码的人感到惊讶。
但是,您可以使用不同的名称在StudyAid
上定义命名范围,例如
named_scope :every
然后你的方法可以成为:
def readable(type=:every)
StudyAid.send(type).authored_by(self)
end
次要问题:您可以使用符号send
,因此不需要to_s
来电。
最后,我认为你的版本并不像你想象的那样难看。
答案 1 :(得分:1)
除非您只想使用:all
,否则这应该可行:
class StudyAid
scope :all_recs
end
def readable(type = :all_recs)
...
P.S。我不是第一次......