0

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

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

4

3 回答 3

6

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

于 2013-03-09T06:27:42.727 回答
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)
于 2013-03-09T10:56:25.883 回答
0

1) 尝试 ActiveRecord::Base 猴子补丁。初始化器目录是收集所有这些小任务的最佳位置

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

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

或者

2)创建master类,用于所有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
于 2013-03-29T07:03:20.367 回答