模型应该在Rails中命名空间吗?

时间:2009-11-03 13:01:47

标签: ruby-on-rails model-view-controller design-patterns model namespaces

通常Ruby on Rails项目中有很多模型,所以:

  1. 将它们命名为(在模块/文件夹中)是一个好习惯吗?有什么缺点? EG:

    • 商店
      • category.rb
      • details.rb
    • 产品
      • category.rb
      • base.rb

    (而不是ShopCategory,有Shop :: Category?)

  2. 控制器是否也应该以相同的方式命名空间?

3 个答案:

答案 0 :(得分:2)

我做的很多。
所以是的,我认为这是你应该做的事情。

如果您将模型细分为子目录而不是将它们全部放在同一个模型中,那么查看模型会更容易。

同样的建议对您的控制器和您的观点也有效。

答案 1 :(得分:2)

我最近发现了这篇文章,但是从2007年起Pratik Naik。模型中的命名空间并不真正类似于数据库。使用类似下面的东西。甚至还有DHH的引用。

Rails::Initializer.run do |config|
  # Your existing stuff
  config.load_paths << "#{RAILS_ROOT}/app/models/pets"
end

http://m.onkey.org/2007/12/9/namespaced-models

p / s:我不知道帖子是否仍然相关,只是我最近在模型中想要名称空间时发现的东西。

答案 2 :(得分:-3)

我建议您为类别模型使用单表继承。例如:

Category < ActiveRecord::Base end

ShopCategory < Category end

ProductCategory < Category end

Shop < ActiveRecord::Base
  belongs_to :shop_category
end

Product < ActiveRecord::Base
  belongs_to :product_category
end

这会将常用的​​类别行为和属性封装到单个模型中,并允许您重用大量代码并拥有单个控制器。当底层类具有某种共同的数据/功能时,使用命名空间只对我有意义。 (例如:acts_as_versioned在模型下创建一个命名空间的Version类)

相关问题