0

別のクラスを呼び出すコントローラーがあります。

class BlahController < ActionController
  def index
    OtherClass.get_stuff
  end
end

このクラスでは、コントローラースタイルのコードを記述できるようにしたいと思います。

例えば:

class OtherClass
  def self.get_stuff
    @foo = bar
  end
end

ただし、ビュー内に存在したい@fooのですが、これは別のクラスであるため、これらの変数はコントローラーの割り当てに戻されません。問題は、どうすればこれを実現できるかということです。

(別のクラスを呼び出さなければならない理由は無視してください。このコードを、あまり手間をかけずにレガシーコードベースに適合させようとしています)

4

2 に答える 2

1
class BlahController < ActionController
  def index
    OtherClass.get_stuff(self)
  end
end

class OtherClass
  def self.get_stuff(that)
    that.instance_variable_set(:@foo, bar)
  end
end

私はこの方法に同意しないことに注意してください。あなたが言ったように、私はただ質問に答えています。

ミックスインを介してこの機能を実現し、それによって上記のコード内に存在するパラメーター結合を減らしたいと思います。

于 2012-10-15T13:33:09.683 に答える
0

このように構造化されたコードは、読み取りと保守が困難になります。可能な限り、ビューに必要なすべての変数をコントローラーに直接設定させます。

class BlahController < ActionController
  def index
    @foo = OtherClass.get_stuff
  end
end

class OtherClass
  def self.get_stuff
    # return the value that should be assigned to @foo  
  end
end
于 2012-10-15T13:52:09.887 に答える