我是Rails的新手并编写了一个方法to_csv
,我把它放在products_controller.rb中,但是我希望它也可以用于所有其他控制器。这样做的首选方法是什么?是在application.rb?
同样,如果我在某个model.rb中编写方法,如何在所有模型之间共享该方法?
答案 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