我已经使用此应用程序来运行网站内特定应用程序的订阅。
我希望能够继续添加应用,因此,我有App
模型。
特定功能需要许多模型,这些模型也可以转换为几个控制器。
我们说我有一个分类广告功能,App
行名称为classified_ads
,ClassifiedAd
模型和ClassifiedCategory
除App
以外的所有内容的模型和控制器。
我面临的问题是,我想知道在任何时候使用的应用程序。
我尝试了很多解决方案,但我特意寻找可扩展的解决方案。
目前,在经历了许多不同的尝试后,我提出的最佳解决方案是名为CurrentApp
的控制器问题。
module CurrentApp
extend ActiveSupport::Concern
included do
helper_method :current_app
end
def current_app
case params[:controller]
when /classified_ads/, /classified_category/
App.find_by_name :classified_ads
when /etc/
App.find_by_name :etc
end
end
我更喜欢自动化和扩展的东西。
我已经尝试过为模型定义方法app
,但由于与名称的耦合,根本没有很好地扩展。我宁愿把这个烂摊子放在一个文件里。
我也一直在调查belongs_to
关系,并为每个与应用相关的模型添加外键。虽然,我认为这实际上有助于考虑到我需要知道我在哪里,甚至没有模型。
如果有人有任何建议,我会非常感谢你的建议。
答案 0 :(得分:1)
如果没有查找表,就无法从:classified_ads
派生classified_category
。您可以在初始化程序中创建一个Lookup类,一个PORO
#app/config/initializers/lookup.rb
class Lookup
LOOKUP = {
classified_categories_controller: :classified_ads,
classified_ads_controller: :classified_ads,
some_other_controller: :other_app
}
def self.app(controller)
LOOkUP[controller.to_sym]
end
end
然后在你的控制器中你可以做....
App.find_by_name(Lookup.app(params[:controller])