我正试图通过 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/