【问题标题】:How complicated can Rails models be? sample projects?Rails 模型可以有多复杂?示例项目?
【发布时间】:2011-03-22 21:52:58
【问题描述】:

我正在尝试超越 Rails 的 初学者 阶段并进入 中级,但我发现很难找到更高级的示例来学习。

例如,我读到您需要小心“嵌套路由”,并且深度不应超过 2。在这种情况下会发生什么?

  • 客户可以下很多订单
  • 订单可以有多个项目
  • 项目可以有多种类型的选项
  • 每种类型的选项都可能有限制:在某些日子可用,或需要选择,或影响总价等。

这对 Rails 来说是个傻事还是简单的事情。我假设是后者,但找不到任何有趣的示例项目(源)可供学习?书籍似乎只停留在基础......想法?

【问题讨论】:

    标签: ruby-on-rails model data-modeling


    【解决方案1】:

    您可以尽可能深入地使用嵌套路由,但请记住,仅仅因为您可以并不意味着您应该这样做。你挖掘得越深,你为自己创造的工作就越多。

    我看到的模式是,对于每个深度级别,您需要创建一个处理父参数的基本控制器和一个处理细节的子类。这往往会按照以下方式进行:

    Customer::BaseController < ApplicationController
    CustomerController < CustomerController:: BaseController
    
    Customer::Orders::BaseController < Customer::BaseController
    Customer::OrdersController < Customer::Orders::BaseController
    
    Customer::Orders::Items::BaseController < Customer::Orders::BaseController
    Customer::Orders::ItemsController < Customer::Orders::Items::BaseController
    

    在每种情况下,BaseController 都以通用方式处理参数的加载和解释,例如:

    class Customer::BaseController < ApplicationController
      before_filter :load_customer
    
    protected
      def load_customer
        @customer = Customer.find(params[:customer_id] || params[:id])
      rescue ActiveRecord::RecordNotFound
        render(:partial => 'customer_not_found', :layout => 'application', :status => :not_found)
      end
    end
    

    如您所见,如果您以这种方式规划您的应用程序,可能会有些复杂。你最终也会得到很长的路线。

    如果您的数据库被设计成记录是相当自治的,并且可以从中推断出很多关系信息,那么您不一定需要费心费力。订单页面可以提供到 @order.customer 的链接,而无需在路径中包含 customer_id。

    【讨论】:

      【解决方案2】:

      嗯,我同意你的观点,很多书都是从基础开始和结束的。

      但是,如果您感到无聊,您应该坐下来构思一个想法。如果你在做一个真正的项目,那总是最好的乐趣。 从示例和虚幻场景中学习可能会有所帮助,但在某些时候是时候迎接挑战了。

      就我个人而言,在完成“使用 Rails 进行敏捷 Web 开发”之后,我就不再看书了。然后我开始做自己的失败并从中吸取教训。

      从理论上讲,您可以尝试为可能遇到的每种“中级”或“高级”情况做好准备。

      老实说,我与问题的斗争与书本中的任何理论场景无关。我必须坐下来,跟踪问题,阅读回溯,思考它们,谷歌搜索类似的问题,编写测试......这真的帮助我获得了经验。

      走出去寻找或发展一个想法。如果有,请编写测试并尝试实现它。 这将为您提供动力,您可能正在寻找。

      注意:http://github.com 是查找源代码以查看和学习的好地方。

      【讨论】:

        【解决方案3】:

        看看opensourcerails.com - 找到一个您感兴趣的应用程序,获取源代码,然后逐个浏览它。在本地运行它,找到有趣的功能,然后进入代码看看它是如何完成的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-31
          • 2021-08-17
          • 1970-01-01
          相关资源
          最近更新 更多