如何使一个方法可用于所有控制器?以及如何所有型号?

时间:2013-03-09 06:15:40

标签: ruby-on-rails ruby

我是Rails的新手并编写了一个方法to_csv,我把它放在products_controller.rb中,但是我希望它也可以用于所有其他控制器。这样做的首选方法是什么?是在application.rb?

同样,如果我在某个model.rb中编写方法,如何在所有模型之间共享该方法?

3 个答案:

答案 0 :(得分:6)

application_controller将是这个地方。如果是模型,也许你可以写一个模块,然后 在您的模型中包含您要使用的内容。

答案 1 :(得分:0)

您还可以在不继承ActiveRecord::Base的情况下创建单独的模型,并在该特定模型中定义csv方法。从任何控制器只需调用

model_name.method_name(parameters)

例如,在模型CsvDB中:

class CsvDB
  def export(parameters)  
    # your csv logic goes here  
  end
end

从任何控制器调用

CsvDB.export(parameters)

答案 2 :(得分:0)

1)尝试ActiveRecord :: Base monkeypatching。 初始化程序目录是收集所有这些小任务的最佳位置

所以,试试/config/initializers/active_record_extension.rb,

class ActiveRecord::Base
   def self.export(parameters)
     #your csv logic goes here
   end
end

2)创建主类,用于继承所有active_record模型

例如/models/your_class.rb

class YourClass < ActiveRecord::Base
  def self.export(parameters)
     #your csv logic goes here
  end
end

class CsvDB < YourClass
end