我正在使用Rails 3.2.5为自己创建一个博客,并且正在尝试正确处理tags
和categories
。我希望允许用户点击带有标记名称的link_to
,将其带到具有相同标记的其他条目,并且网址为'root.com/tag/selected-tag'
。对于类别,我希望URL与'root.com/category/selected-category'
具有相同的功能。我已经开始使用acts_as_taggable_on
进行标记,并使用简单的text input
作为类别(当我确定我想要的类别时,将成为select input
。
我将如何处理此问题?我尝试为tags
和categories
创建一个控制器,每个控制器只有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)
由于tags
和category
作为:format
传递,因此网址显示为'root.com/tag.selected-tag'
和'root.com/category.selected-category'
。
如何正确处理tags
和categories
以使网址显示为'root.com/tag/selected-tag'
和'root.com/category/selected-category'
?
答案 0 :(得分:4)
以下可能会做你想做的事:
在您的路线中:
match 'tag/:tag' => 'tags#index', :as => :tag
然后,当有人访问example.com/tag/some-tag-here
时,您可以通过以下方式访问控制器中的标记:
params[:tag]
您可以通过以下方式链接到您的路线:
link_to tag, tag_path(:tag => tag)
类似的解决方案也适用于类别。