Rails 3.1和静态页面
-
25-10-2019 - |
题
我只是在将大型应用程序从Rails 3升级到Rails 3.1,并在我实施页面控制器的情况下遇到了问题:
when templates doesnt exist
should render the 404 page (FAILED - 1)
Failures:
1) PagesController automatic paths when templates doesnt exist should render the 404 page
Failure/Error: get 'base_page_processor', :base_page => 'something_that_doesnt_exist'
NoMethodError:
undefined method `map' for "pages":String
# ./app/controllers/pages_controller.rb:5:in `base_page_processor'
# ./spec/controllers/pages_controller_spec.rb:37:in `block (3 levels) in <top (required)>'
Finished in 0.10557 seconds
4 examples, 1 failure
Failed examples:
rspec ./spec/controllers/pages_controller_spec.rb:36 # PagesController automatic paths when templates doesnt exist should render the 404 page
这确实在Rails 3.0中起作用。使用Template_Exists方法必须更改一些东西。这是控制器:
class PagesController < ApplicationController
def base_page_processor
view_prefix = "pages"
if params[:base_page].present? && template_exists?(params[:base_page], view_prefix)
render "#{view_prefix}/#{params[:base_page]}"
else
#TODO : Notify missing url via email error or error notification service
render '/public/404.html', :status => 404
end
end
end
解决方案代码:
class PagesController < ApplicationController
def base_page_processor
view_prefix = ["pages"]
if params[:base_page].present? && template_exists?(params[:base_page], view_prefix)
render "#{view_prefix[0]}/#{params[:base_page]}"
else
#TODO : Notify missing url via email error or error notification service
render '/errors/404.html', :status => 404
end
end
end
我还注意到它没有呈现错误视图(即:/public/404.html),因此我创建了一个目录应用程序/视图/错误,并将所有错误静态页面放入其中,然后立即渲染它们。有用。
谢谢安德鲁。
解决方案
这 template_exists
方法参数表明第二个参数前缀应为数组。通常,轨道方法通过将某物转换为阵列(如果没有)来接受两者,因此这有点不寻常。
exists?(name, prefixes = [], partial = false, keys = [])
此方法也被称为template_exists?
# File actionpack/lib/action_view/lookup_context.rb, line 93
def exists?(name, prefixes = [], partial = false, keys = [])
@view_paths.exists?(*args_for_lookup(name, prefixes, partial, keys))
end
所以制作 view_prefix = ["pages"]
应该管用? (并相应地修改其余的字符串插值)
不隶属于 StackOverflow