Rails 5.1+:命名空间模型和默认路径生成器

时间:2018-02-14 13:16:20

标签: routes namespaces ruby-on-rails-5

我在模型上使用命名空间来组织一个大项目。但是,在命名模型时,Rails中的默认url / path生成器在路由中使用该命名空间:

module Workflows
  class Workflow < ApplicationRecord
    # ...
  end
end

<%= form_with model: @workflow, url: @workflow do |form| %>
# => produces URL: workflows_workflow_path(@workflow)

我看过很多关于覆盖model_name的SO帖子,但它对我没有任何作用。我已经尝试了以下所有版本:

module Workflows
  class Workflow < ApplicationRecord
    def self.model_name
      # Have tried all of the following as per various SO questions...
      ActiveModel::Name.new(Workflow)
      ActiveModel::Name.new(::Workflows::Workflow, nil, nil)
    end
  end
end

当我检查model_name时,它明确指出route_keyworkflows_workflow,即使ActiveModel名称已覆盖。

我正在运行Rails 5.1和Ruby 2.4.1。

如何强制Rails将这些命名空间模型视为非命名空间?命名空间仅适用于开发人员组织,我不需要Rails使用命名空间“执行”任何操作。

1 个答案:

答案 0 :(得分:0)

请尝试:

module Workflows
  class Workflow < ApplicationRecord
    def self.model_name
      ActiveModel::Name.new(self, nil, "Workflow")
    end
  end
end

与指定的here一样。