我是Rails的新手,已經寫了一個方法to_csv
,我已經將它放在products_controller.rb中,但是我希望它也可以用於所有其他控制器。什麼是這樣做的首選方式?它在application.rb中嗎?如何使一個方法可用於所有控制器?以及如何對所有模型?
同樣,如果我在某個model.rb中編寫方法,如何在所有模型之間共享該方法?
我是Rails的新手,已經寫了一個方法to_csv
,我已經將它放在products_controller.rb中,但是我希望它也可以用於所有其他控制器。什麼是這樣做的首選方式?它在application.rb中嗎?如何使一個方法可用於所有控制器?以及如何對所有模型?
同樣,如果我在某個model.rb中編寫方法,如何在所有模型之間共享該方法?
application_controller將成爲該地點。如果對於模型,也許你可以寫在模塊中,那麼 包含在你想要使用的模型中。
您也可以創建一個單獨的模型,而不需要繼承ActiveRecord::Base
並在該特定模型中定義您的csv方法。而從任何控制器只需要調用
model_name.method_name(parameters)
例如,在模型CsvDB:
class CsvDB
def export(parameters)
# your csv logic goes here
end
end
從任何控制器只需要調用
CsvDB.export(parameters)
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
繼承
@Mischa是的,這很好。但是如果我們使用monkeypatch,則不需要手動將模塊包含/擴展到所有模型 – 2013-03-29 07:20:44