【问题标题】:how to duplicate entire model/controller/view for a different asset type如何为不同的资产类型复制整个模型/控制器/视图
【发布时间】:2011-12-19 20:42:25
【问题描述】:

对于新手问题感到抱歉:我有一个应用程序具有不同资产类型(文档、视频等)的项目。我想添加另一个具有与视频相同功能的音频资产。有没有一种方法可以轻松复制模型/控制器/视图/表格,将“视频”更改为“音频”?

【问题讨论】:

  • 干了 :-) 如果它们如此相似,为什么不使用相同的 MVC 呢?好吧,如果您确实需要单独的表,您可以让一个模型扩展另一个模型并指定其表名...
  • 为什么不创建一个模块来打包这些功能呢?或者只是使用继承。如果您喜欢花哨的行为,甚至可以通过额外的元编程进行继承……这完全取决于您以及您想要实现的目标。如果您感到迷茫,只需对设计模式进行一些研究(我发现 Addison Wesley 的“Ruby 中的设计模式”一书很好地介绍了这个主题)

标签: ruby-on-rails code-duplication


【解决方案1】:

您可以使用ActiuveSupport::Convern 编写一个Module,其中包含模型中所需的所有方法,然后您可以include 模型中的模块以使用模块中包含的方法扩展模型。像这样:

module AwsomeModule
     include ActiveSupport::Concern
     module ClassMethods
          # awesome class methods here
     end
     module InstanceMethods
          # awesome instance methods here
     end
end

然后在模型中简单地包含您的模块。对于视图,您可以使用 Partials 并通过 objectas 选项为它们提供对象,如下所示:

render 'layouts/awesome_partial', :object => @instance_var, :as => :data

然后在 Partial 中你不能访问使用变量 data 给出的对象。

【讨论】:

    猜你喜欢
    • 2011-12-28
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多