【问题标题】:Pagination in Rails 3 with Kaminari always "destroys" one part of the URL在 Rails 3 中使用 Kaminari 的分页总是“破坏”URL 的一部分
【发布时间】:2011-11-25 17:44:42
【问题描述】:

我正在使用带有 Kaminari 的 Rails 3 应用程序进行分页。由于我的语言、搜索引擎优化和友好的 URL,我想更改我的 URL 的样子。但似乎我必须在友好的分页链接和/或显示正确的方法名称之间做出决定。但首先要做的是:

我有一个模型,称为“页面”,其中包含一些不能仅应用于一个模型或不包含任何模型的页面。以下是我的“routes.rb”的一个 sn-p:

match'/neugikeiten', :to => 'pages#neuigkeiten'

scope(:path_names => { :new => "neu", :edit => "bearbeiten", :delete => "loeschen", :index => "index", :page => "seite" }) do
  resources :news, :path => "neuigkeiten"
end

如您所见,我将每个页面从页面匹配到一个名称,并将所有其他模型和方法(我仅使用一个作为示例)与范围匹配。所有这些工作都很好。但现在我必须添加 Kaminare 路线,其路线如下所示:

resources :pages do
  get 'seite/:page', :action => :neuigkeiten, :on => :collection
end

所以,基本上我想要的是这样一个 URL:

/neuigkeiten/seite/2

2 只是一个例子,seite 是页面的德语单词。但我得到的是:

/pages/seite/2

所以,我得到的是模型名称,而不是我为这个单一页面定义的名称。我已经尝试过切换不同的代码,但要么我在 URL 中只有原始模型名称,要么我没有得到很好的分页 URL,如下所示:

/neuigkeiten?page=2

如果我尝试匹配没有这样资源的页面:

match'/tagebuch/seite/:page', :to => 'pages#tagebuch', :on => :collection

我收到以下错误。

can't use collection outside resources scope

在我看来应该有另一种方法来做到这一点,因为我不可能是唯一遇到这种问题的人。

很高兴得到任何帮助!

【问题讨论】:

  • 只是一个建议,如果你遵守约定,它会让你的生活更轻松。您可以用简单的英语进行所有路由和对象命名,并在应用程序中管理一些语言环境
  • 谢谢,但正如我所说,我想要德语的路线。即使我确实希望它们是英文的,我仍然会遇到问题,rails 给我的是模型名称,而不是 URL 中的页面名称。所以这不仅仅是语言的问题。

标签: ruby-on-rails-3 pagination routes url-routing kaminari


【解决方案1】:

如果有人对解决方案感兴趣,我自己找到了一个。它并不完美,但它确实有效。

我必须为本地化安装一个名为“i18n_routing”的额外 gem。然后在我的 routes.rb 中我做了:

localized do
  resources :news, :path => "neuigkeiten" do
    get 'seite/:page', :action => :index, :on => :collection
  end
end

其余部分在本地化语言文件 (en.yml) 中完成。

【讨论】:

    猜你喜欢
    • 2011-10-28
    • 2012-01-02
    • 2012-01-01
    • 1970-01-01
    • 2012-02-18
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    相关资源
    最近更新 更多