0

我一直在互联网上寻找一个多小时,但我找不到任何关于此的信息。

我正在为网站的数据创建过滤器,目前这些过滤器由案例声明处理

  class MyClass
    attr_accessor :attribute
    def self.function(value)
      query = case value
        when "open" then "Open"
        ...
      end
      where(:attribute => query)
    end
 end

由于各种原因(即动态而不是硬编码过滤器),我想用getter和setter创建一个模型,但我无法让它工作

我的新功能:

def self.function(value)
  Attribute.name = value
  where(:attribute => Attribute.name)
end

我的新模型:

class Attribute
  attr_accessor :name
end

和测试:

it "should set the attribute to 'hello'" do
    MyClass.function("hello")
    Attribute.name.should eql "hello"
end

给出一个错误:

Failure/Error: Myclass.function("hallo")
 NoMethodError:
   undefined method `name=' for Attribute:Class

任何帮助,将不胜感激

4

1 回答 1

1

这是因为attr_accessor正在定义实例方法(即:作用于 Attribute 实例的方法)并且您尝试将其用作类方法(即:Attribute.name)。

你可以这样重写你的函数:

def self.function(value)
  attribute = Attribute.new
  attribute.name = value
  where(:attribute => attribute.name)
end
于 2012-11-15T11:19:13.697 回答