为标签和类别创建操作和路由

时间:2012-07-28 21:18:14

标签: ruby-on-rails-3 routes categories acts-as-taggable-on controller-actions

我正在使用Rails 3.2.5为自己创建一个博客,并且正在尝试正确处理tagscategories。我希望允许用户点击带有标记名称的link_to,将其带到具有相同标记的其他条目,并且网址为'root.com/tag/selected-tag'。对于类别,我希望URL与'root.com/category/selected-category'具有相同的功能。我已经开始使用acts_as_taggable_on进行标记,并使用简单的text input作为类别(当我确定我想要的类别时,将成为select input

我将如何处理此问题?我尝试为tagscategories创建一个控制器,每个控制器只有index个动作。对于'tags#index'我有:

@entries = Entry.order('created_at desc').tagged_with(params[:format]).paginate(:page => params[:page], :per_page => 10)

以及每个tag的链接:

= link_to tag, tag_path(tag)

出于某种原因,tag作为:format传递,这就是我tagged_with(params[:format])的原因。

我将'categories#index'定义为:

@entries = Entry.order('created_at desc').where(:category => params[:format]).paginate(:page => params[:page], :per_page => 10)

category的链接是:

  - entry.tag_list.each do |tag|
    = link_to tag, tag_path(tag)

由于tagscategory作为:format传递,因此网址显示为'root.com/tag.selected-tag''root.com/category.selected-category'

如何正确处理tagscategories以使网址显示为'root.com/tag/selected-tag''root.com/category/selected-category'

1 个答案:

答案 0 :(得分:4)

以下可能会做你想做的事:

在您的路线中: match 'tag/:tag' => 'tags#index', :as => :tag

然后,当有人访问example.com/tag/some-tag-here时,您可以通过以下方式访问控制器中的标记: params[:tag]

您可以通过以下方式链接到您的路线:

link_to tag, tag_path(:tag => tag)

类似的解决方案也适用于类别。