【问题标题】:Rails Application with 500 models带有 500 个模型的 Rails 应用程序
【发布时间】:2010-12-05 06:28:45
【问题描述】:

我有一个 Rails 应用程序,其中有数百个只有 CRUD 操作的模型。我可以使用脚手架/活动脚手架,但最终我的应用程序目录中有这么多文件。

是否可以使用通用模型、视图和控制器来处理这些问题,而不是在应用程序文件夹中放置 500 个。

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    当然。

    class GenericCrudController < ApplicationController
      def index
        current_model.find(:all)
      end
    
      private
    
      def current_model
        params[:model].constantize = Class.new(ActiveRecord::Base)
      end
    end
    

    current_model 方法将动态创建ActiveRecord::Base 的后代。当然,这段代码非常基础。

    更新:这会抱怨没有constantize= 方法。你可能不得不这样做:Kernel.const_set(params[:model], Class.new(ActiveRecord::Base))

    【讨论】:

      【解决方案2】:

      我会在 August 所说的基础上再接再厉。还有一个错误。应该是:

        def current_model
          params[:model].constantize
        end
      

      您可能想要过滤模型可以是什么,否则如果您有任何他们不应该访问的私有模型,它可能会变得混乱。

      对于视图,您可以查看模型有多少列并为它们准备适当的字段。

      【讨论】:

        【解决方案3】:

        另一个选择是使用一个插件来制作丰富的 CRUD 接口。一个很好的例子是ActiveScaffold。创建界面很简单:

        class UsersController < ApplicationController
          active_scaffold :user
        end
        

        【讨论】:

        • 我试过主动脚手架,看起来不错,但问题是我最终在目录中仍然有 500 个我不想要的文件。
        • 是的,没错。也许您可以将 August 和 Jim 的 current_model 方法与 active_scaffold 结合起来。
        猜你喜欢
        • 1970-01-01
        • 2023-03-12
        • 1970-01-01
        • 2011-04-09
        • 1970-01-01
        • 2017-07-14
        • 1970-01-01
        • 1970-01-01
        • 2011-08-30
        相关资源
        最近更新 更多