【发布时间】:2010-12-05 06:28:45
【问题描述】:
我有一个 Rails 应用程序,其中有数百个只有 CRUD 操作的模型。我可以使用脚手架/活动脚手架,但最终我的应用程序目录中有这么多文件。
是否可以使用通用模型、视图和控制器来处理这些问题,而不是在应用程序文件夹中放置 500 个。
【问题讨论】:
标签: ruby-on-rails
我有一个 Rails 应用程序,其中有数百个只有 CRUD 操作的模型。我可以使用脚手架/活动脚手架,但最终我的应用程序目录中有这么多文件。
是否可以使用通用模型、视图和控制器来处理这些问题,而不是在应用程序文件夹中放置 500 个。
【问题讨论】:
标签: ruby-on-rails
当然。
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))。
【讨论】:
我会在 August 所说的基础上再接再厉。还有一个错误。应该是:
def current_model
params[:model].constantize
end
您可能想要过滤模型可以是什么,否则如果您有任何他们不应该访问的私有模型,它可能会变得混乱。
对于视图,您可以查看模型有多少列并为它们准备适当的字段。
【讨论】:
另一个选择是使用一个插件来制作丰富的 CRUD 接口。一个很好的例子是ActiveScaffold。创建界面很简单:
class UsersController < ApplicationController
active_scaffold :user
end
【讨论】: