2010-07-29 61 views
3

我试图移动通过初学者阶段的Rails和到中间但我发现很难找到更多的高级示例学习。Rails模型有多复杂?示例项目?

例如,我读过你需要小心“嵌套路线”,不应超过2深。在这样的情况下会发生什么?

  • 客户可以将很多订单
  • 订单可以有很多项目
  • 项目可以有许多种选择的
  • 每种类型的选项可以有限制的:可在某些日子,或者需要进行选择,或影响总价格等。

这是一个愚蠢的差事或简单的东西的Rails。我假设后者,但无法找到任何有趣的示例项目(源)在那里学习?书籍似乎停止了基本的想法?

回答

2

你可以随心所欲地嵌套路线,但请记住,只是因为你可以不意味着你应该。你挖的越深,你为自己创造的工作就越多。

我看到的模式是,对于每个深度级别,您需要创建一个处理父参数的基本控制器,以及一个处理细节的子类。这趋向于沿的线打出来:

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。

1

嗯,我同意你的看法,很多书在基础知识上开始和停止。

但是,如果你觉得无聊,你应该坐下来发展一个想法。如果你正在从事一个真正的项目,那永远是最好的乐趣。 从示例和虚幻场景中学习可能会有所帮助,但是在某个时候是时候去面对一些挑战了。

个人而言,在完成“使用Rails进行敏捷Web开发”后,我停止阅读书籍。然后我开始制造自己的失败,并从中学习。

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

老实说,我用我的方式与问题对抗的战斗与书中发现的任何理论场景都没有关系。我不得不坐下来,跟踪问题,阅读回溯,思考它们,谷歌类似的问题,写测试...这是真正帮助我获得经验。

去那里找到或开发一个想法。如果你有一个,写测试并尝试实现它。 这会给你提升,你可能正在寻找。

注:http://github.com是一个很好的找到源代码的地方,看看&从中学习。

0

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