0

インターネットで 1 時間以上探していますが、これについては何も見つかりません。

Web サイトのデータ用のフィルターを作成していますが、現在これらは case ステートメントで処理されています

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

さまざまな理由 (つまり、フィルターをハード コーディングする代わりに動的) により、ゲッターとセッターを使用してこれからモデルを作成したいのですが、これを機能させることができません。

私の新しい機能:

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 に答える