我有一个问题,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"}
为什么一个目录太深了?
答案 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)