ruby-on-rails - Rails 模型可以有多复杂?样本项目?

标签 ruby-on-rails model data-modeling

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

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

  • 客户可以下很多订单
  • 订单可以有很多商品
  • 项目可以有多种类型的选项
  • 每种类型的选项都可以有限制:在特定日期可用,或需要选择,或影响总价等。

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

最佳答案

您可以根据需要深入嵌套路由,但请记住,您可以并不意味着您应该这样做。您挖掘得越深,您为自己创造的工作就越多。

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

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。

关于ruby-on-rails - Rails 模型可以有多复杂?样本项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3365955/

相关文章:

ruby-on-rails - 如何使用 .xml.builder 文件从 XMLBuilder 生成 XML?

ruby-on-rails - 将 Rails 迁移标记为已迁移

oop - 如何以面向对象的方式对商店的营业时间进行建模?

sql-server - 在数据库设计中使用 rowguid 作为唯一键是个好主意吗?

asp.net - asp.net postback 模型的问题或缺陷

具有过时数据删除可能性的 Cassandra 数据模型

ruby-on-rails - Rails 3.1 (rc4)、AJAX 和 UTF-8

ruby-on-rails - 运行单个迁移文件

php - 如何将 2 个模型请求合并到一个查询中

asp.net-mvc - ASP.NET MVC - 将模型值传递给数据注释参数