在Rails中扩展控制器

时间:2012-10-15 12:51:45

标签: ruby-on-rails ruby actioncontroller

我有一个控制器,可以调用另一个类。

class BlahController < ActionController
  def index
    OtherClass.get_stuff
  end
end

在这个课程中,我希望能够编写控制器样式代码。

例如:

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

但是,我希望在我的视图中存在@foo,但由于它是一个单独的类,这些变量不会让它重新进入控制器分配 - 所以问题是,我怎么能这样做?

(忽略为什么我不得不召集一个单独的课程,我试图让这段代码适应遗留的代码库而不需要太多的屠杀)

2 个答案:

答案 0 :(得分: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完成此功能,从而减少上面代码中存在的参数耦合。

答案 1 :(得分: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