Rails FriendlyId包含URL中的URL

时间:2013-05-20 15:19:55

标签: ruby-on-rails friendly-id

我的应用程序缓存网页

在页面#new上,当您提交网址(没有http://前缀)时,会创建一个页面并重定向到该节目,例如pages/4,其中4是ID

我正在尝试添加friendly_id但在将extend FriendlyIdfriendly_id :url添加到我的Page模型

之后遇到问题

如果我提供“yahoo.com”,重定向将转到page / yahoo.com。 yahoo.com被解释为{"id"=>"yahoo", "format"=>"com"},rails告诉我Couldn't find Page with id=yahoo

如果我提供“yahoo.com/index.html”,重定向会转到page / yahoo.com / index.html,但我只是得到No route matches [GET] "/pages/yahoo.com/index.html"

您认为我怎么能解决这个问题?

1 个答案:

答案 0 :(得分:0)

rails路由中的句点表示格式(.json,.html,.csv等)。要使路径包含句点,您需要在format文件中将路径上的config/routes.rb选项设置为false。

这个答案来自Disable :.format routes in rails3

match '*pages' => 'pages#show', :format => false

或(足智多谋):

constraints :format => // do
  resources :pages
end

对于friendly_id,您是否已运行迁移以将:slug列添加到Page模型?

对于您的示例,friendly_id采用:url列,使其成为友好的URL,然后使用正确的:slug值更新您的Page实例。我怀疑friendly_id可能会用下划线代替句号,但我没有验证这一点。

如果您不想使用:slug列并且您已经有:url列,那么您需要将其定义为:

friendly_id :url, use: [:slugged], slug_column: :url

...具体来说,是slug_column参数。