0

我怎样才能干掉下面的 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
4

2 回答 2

1

我不会尝试修改该all方法的行为,因为这可能会意外地改变代码其他部分的语义,并使其他使用您的代码的人感到惊讶。

但是,您可以使用不同的名称定义命名范围,StudyAid例如

named_scope :every

然后你的方法可能变成:

def readable(type=:every)
  StudyAid.send(type).authored_by(self)
end

次要观点:您可以使用符号 with ,因此不需要send您的调用。to_s

最后,我不认为你的版本像你自己想象的那么丑。

于 2012-09-07T15:41:12.253 回答
1

除非您只想使用:all,否则这应该可以工作:

class StudyAid
  scope :all_recs
end

def readable(type = :all_recs)
...

PS虽然我不是第一个...

于 2012-09-07T15:42:53.617 回答