Rails视图模板路径加载似乎不正确

时间:2013-02-11 10:54:07

标签: ruby-on-rails ruby

我有一个问题,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"}

为什么一个目录太深了?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

如果您仍想执行此操作,只需在打印操作中使用render并指定您要使用的确切文件(请参阅here