使用纯红宝石对象委派ActiveRecord对象

时间:2011-01-26 22:54:30

标签: ruby-on-rails activerecord delegates

我希望能够拥有专门用于开发和测试的TestUser模型,其行为与我的普通用户模型完全相同,只是它始终进行身份验证。
这里的关键问题是让TestUser始终在User上调用类方法并查找它的类级别实例变量,就像它是普通用户一样,而不是通过cattr_accessor来完成,即:

class User
  class << self
    attr_accessor :foo
  end
end

class TestUser ?< ??
  ??
end

---
User.foo = 'bar'
TestUser.foo => 'bar'
User.new.authenticate?('password') => maybe, runs authentication
TestUser.new.authenticate?(_) => true

我知道我可以通过将用户在测试和开发中扩展到始终进行身份验证来完成我想要的工作,但我想知道是否可以使用额外的类来完成它。

2 个答案:

答案 0 :(得分:0)

如果你不打算在生产中使用它,我不会浪费任何时间。

你有一些测试可以让你“始终对一个用户进行身份验证”,但为什么要浪费时间来解决这个问题呢,当你可以为你的最终目标编码时,更快/更强/更好地解决这个问题...无论你的目标是什么。

答案 1 :(得分:0)

class TestUser < User
  def authenticate?
    true
  end
end

如果你只是测试你的代码,你应该使用tests / rspec。

您可以使用:cattr_accessor :foo来访问类变量。