我正在将Rails 3.2.3与100多个模型一起使用。问题是应用程序/模型目录太拥挤了。我将目录分为几组,并添加了autoload_paths(用于新的子目录)。我不希望我的模型使用命名空间,因为它最终会变成几个不利于开发的命名空间。
比方说:

# app/models/listing.rb
class Listing < ActiveRecord::Base
  has_many :communications
end

# app/models/listing/communication.rb
class Communication < ActiveRecord::Base
end


在我的rails控制台中,除了activerecord关联外,它适用于具有绝对参考的任何模型。我无法致电Listing.first.communications。我看到它正在尝试加载Listing :: Communication,它失败了,因为此文件的内容是Communication(无名称空间)。

LoadError: Expected /home/chamnap/my_app/app/models/listing/communication.rb to define Listing::Communication


有没有一种将模型分组到目录中并在没有名称空间的情况下使用它们的方法?还是有一种方法可以预加载所有模型,以使Rails不会即时加载模型?

最佳答案

Rails 3中子目录和关联中的模型存在问题。我也偶然发现了这一点。

我的解决方案是为每个要在子目录中建模的关联指定一个显式的:class_name

class Listing < ActiveRecord::Base
  has_many :communications, :class_name => "::Communication"
end


请注意在模型名称之前使用“ ::”-它告诉Rails Communication模型没有名称空间。

09-26 09:26