【问题标题】:Rails: Conflict Between Namespaced and Non-Namespaced ResourcesRails:命名空间和非命名空间资源之间的冲突
【发布时间】:2013-04-12 06:57:52
【问题描述】:

我有两个Review 模型。第一个命名空间为Membership::Review,第二个没有命名空间Review。当我调用非命名空间模型时,Rails 会尝试查找命名空间模型。例如:

library.includes(:reviews)

告诉我这个错误:

Expected C:/sites/shelflives/app/models/membership/review.rb to define Review

在我的Library 模型中,Review 关联是正确的:

has_one :review

即使我明确指定模型,我也会得到相同的错误:

has_one :review, :class_name => "Review"

知道发生了什么吗?

【问题讨论】:

  • Rails 控制台中Membership::Review.new 命令的错误是否仍然存在?
  • 是的,Membership::Review.new 也是如此。
  • 您是否添加了任何带有config.autoload_paths 的额外路径以在应用程序配置中加载您的模型?
  • 我做到了:config.autoload_paths += Dir[Rails.root.join('app', 'models', '**/')]。此代码自动加载子目录,因此我可以更好地组织非命名空间模型。
  • 看来是你的问题,评论这一行,重启服务器并在控制台Membership::Review.new中尝试。您不需要加载模型的子文件夹,它们将通过命名空间自动加载。

标签: ruby-on-rails namespaces associations


【解决方案1】:

当您在带有模型子文件夹的application.rb 中添加额外的config.autoload_paths 时,会发生这种错误。

您不需要这样做。所有模型都将通过命名空间自动加载。您只需要使用命名空间的子文件夹来组织正确的结构。

如果你在模型中使用命名空间,你可以像这样使用生成器:

rails g model membership/review

这将生成正确的命名空间模型并将其保存到 membership 子文件夹。

【讨论】:

    猜你喜欢
    • 2012-09-10
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    • 1970-01-01
    • 2014-07-01
    • 1970-01-01
    相关资源
    最近更新 更多