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

请注意,我不同意这种方法。我只是按照你所说的那样回答问题。

我更愿意通过 mixins 来完成这个功能,从而减少上面代码中存在的参数耦合。

于 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 回答