Ruby on Rails路由别名

时间:2013-09-17 18:28:49

标签: ruby-on-rails ruby rails-routing

我正在尝试在rails app上为ruby添加路由别名。这是我现有的路由文件:

scope "/blog" do    
  resources :tags, :path => :tags, :as => :tags, :only => [:index, :show] do
    match 'page/:page' => 'tags#show', :on => :member
  end
end

适用于以下路线:

/ blog / tags / sandwiches

但是,我想为一些特殊标签添加别名(不重定向),所以我可以像这样引用它们:

/博客/三明治

我在我/博客范围内添加了这个匹配语句:

match 'sandwiches' => 'tags#show', :defaults => { :id => 1 }

但我现在收到此错误:

NoMethodError in TagsController#show

undefined method `cache_key' for nil:NilClass

似乎它已被路由到正确的方法,但似乎出现了缓存(?)错误。

我还把完整的追踪作为一个要点:

https://gist.github.com/whitnelson/6598921

1 个答案:

答案 0 :(得分:0)

我认为你想要的是这样的:

class SpecialTagssConstraint
  require 'set'
  def initialize
    @ok_tags = Set.new(['sandwiches','pastries'])
  end

  def matches?(request)
    @ok_tags.include?(request.params[:id])
  end
end

 ...
    get '/:id', to: 'tags#show', constraints: SpecialTagsConstraint.new

我很确定您需要使用不同的参数名称:id尽管。

它应该是您通常使用值“三明治”传递的任何参数。

没有看到你的模特,我猜不出那是什么。 (标记?,名称?,)