在 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) %>