Rails控制器和网站功能订阅

时间:2016-05-21 22:19:23

标签: ruby-on-rails ruby

上下文

我已经使用此应用程序来运行网站内特定应用程序的订阅。

我希望能够继续添加应用,因此,我有App模型。

特定功能需要许多模型,这些模型也可以转换为几个控制器。

实施例

我们说我有一个分类广告功能,App行名称为classified_adsClassifiedAd模型和ClassifiedCategoryApp以外的所有内容的模型和控制器。

问题

我面临的问题是,我想知道在任何时候使用的应用程序。

我尝试了很多解决方案,但我特意寻找可扩展的解决方案。

目前,在经历了许多不同的尝试后,我提出的最佳解决方案是名为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关系,并为每个与应用相关的模型添加外键。虽然,我认为这实际上有助于考虑到我需要知道我在哪里,甚至没有模型。

如果有人有任何建议,我会非常感谢你的建议。

1 个答案:

答案 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])