在 Refinery CMS 上向 routes.rb 添加重定向时出现 NoMethodError
NoMethodError at adding redirection to routes.rb on Refinery CMS
由于从旧路径重定向到新路径,我添加到 routes.rb:
Refinery::Core::Engine.routes.prepend do
get 'about.html', to: redirect('/about')
end
mount Refinery::Core::Engine, at: '/'
因此,它没有被重定向到“/about”并引发 NoMethodError:
NoMethodError - undefined method `valid_encoding?' for :en:Symbol:
actionpack (4.1.9) lib/action_dispatch/routing/redirection.rb:23:in `block in call'
动作包 (4.1.9) lib/action_dispatch/routing/redirection.rb:23:
req.symbolized_path_parameters.each do |key, value|
unless value.valid_encoding? # <= L23
raise ActionController::BadRequest, "Invalid parameter: #{key} => #{value}"
end
end
打开时'localhost:3000/about.html'
使用宝石:refinerycms 3.0.0,rails 4.1.9
有解决这个问题的想法吗?
从您发布的内容来看,您遗漏了一件事,那就是控制器代码。在 about_controller.rb .
中尝试以下操作
def find_page
@page = ::Refinery::Page.find_by_link_url("/about")
end
@asgeo1 最后我找到了另一个解决方案。我的解决方案是通过high_voltage创建静态页面。
我想在这种情况下无法通过 Refinery::Pages.
跟上重定向和动态路由
- 停止在 root 上安装 RefineryCMS 并在“/cms”上安装
- 创建 /app/views/pages/about.html.erb,以便发布为“/about”。参考:high_voltage:Usage
在 routes.rb 之后:
mount Refinery::Core::Engine, at: '/cms'
get 'about.html', to: redirect('/about')
如果您还需要通过 Refinery::Pages 管理页面,请在 RefineryCMS 上创建“/about”页面,
以下 app/views/pages/about.html.erb:
<% @page = Refinery::Pages.find_by(link_url: '/about') %>
<%= raw @page.content_for(:body) %>
由于从旧路径重定向到新路径,我添加到 routes.rb:
Refinery::Core::Engine.routes.prepend do
get 'about.html', to: redirect('/about')
end
mount Refinery::Core::Engine, at: '/'
因此,它没有被重定向到“/about”并引发 NoMethodError:
NoMethodError - undefined method `valid_encoding?' for :en:Symbol:
actionpack (4.1.9) lib/action_dispatch/routing/redirection.rb:23:in `block in call'
动作包 (4.1.9) lib/action_dispatch/routing/redirection.rb:23:
req.symbolized_path_parameters.each do |key, value|
unless value.valid_encoding? # <= L23
raise ActionController::BadRequest, "Invalid parameter: #{key} => #{value}"
end
end
打开时'localhost:3000/about.html'
使用宝石:refinerycms 3.0.0,rails 4.1.9
有解决这个问题的想法吗?
从您发布的内容来看,您遗漏了一件事,那就是控制器代码。在 about_controller.rb .
中尝试以下操作def find_page
@page = ::Refinery::Page.find_by_link_url("/about")
end
@asgeo1 最后我找到了另一个解决方案。我的解决方案是通过high_voltage创建静态页面。 我想在这种情况下无法通过 Refinery::Pages.
跟上重定向和动态路由- 停止在 root 上安装 RefineryCMS 并在“/cms”上安装
- 创建 /app/views/pages/about.html.erb,以便发布为“/about”。参考:high_voltage:Usage
在 routes.rb 之后:
mount Refinery::Core::Engine, at: '/cms'
get 'about.html', to: redirect('/about')
如果您还需要通过 Refinery::Pages 管理页面,请在 RefineryCMS 上创建“/about”页面,
以下 app/views/pages/about.html.erb:
<% @page = Refinery::Pages.find_by(link_url: '/about') %>
<%= raw @page.content_for(:body) %>