0

我有一个问题,Rails 根据控制器路径搜索附加子目录。有没有办法让 rails 停止搜索一个额外的子目录?我有点喜欢我现在拥有的目录结构。这是详细信息:

Rails 将返回此错误消息。如您所见,它会进行v1两次:

Template is missing
Missing template api/v1/v1/print

我有一个控制器app/controllers/api/v1/v1_controller.rb和一个视图app/views/api/v1/print.html.erb

config/routes.rb 中的具体路由是(半截断的):

namespace :api do
    scope module: :v1 do
        match "v1/print",
            :to => "v1#print"
    end
end

根据路线,它看起来不错。耙路线显示了这一点:

api_v1_print GET|POST /api/v1/print(.:format)  api/v1/v1#print {:format=>"html"}

为什么一个目录太深了?

4

2 回答 2

1

只需v1从比赛中删除,如下所示:

namespace :api do
    scope module: :v1 do
        match "print",
            :to => "v1#print"
    end
end

编辑

抱歉,问题出在您的模板文件夹中。

app/views/api/v1/print.html.erb
app/views/(namespace)/(module)/(action) <- you have forgoten the controller

正确的是:

app/views/api/v1/v1/print.html.erb
于 2013-02-11T10:56:18.860 回答
1

问题是 Rails 假设每个控制器都有一个子目录。由于模块和控制器名称中有 v1,因此形成了重复。我不会违背 Rails 的约定。相反,我会将控制器的名称更改为 API 控制器(或类似名称)并将模板放在名为 API 的目录下。

如果您仍然想这样做,只需render在您的打印操作中使用并指定您想要使用的确切文件(参见此处

于 2013-02-11T11:04:16.150 回答