我在模型上使用命名空间来组织一个大项目。但是,在命名模型时,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_key
为workflows_workflow
,即使ActiveModel名称已覆盖。
我正在运行Rails 5.1和Ruby 2.4.1。
如何强制Rails将这些命名空间模型视为非命名空间?命名空间仅适用于开发人员组织,我不需要Rails使用命名空间“执行”任何操作。
答案 0 :(得分:0)
请尝试:
module Workflows
class Workflow < ApplicationRecord
def self.model_name
ActiveModel::Name.new(self, nil, "Workflow")
end
end
end
与指定的here一样。