3

我正在尝试将路由别名添加到 ruby​​ on rails 应用程序。这是我现有的路由文件:

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

这适用于以下路线:

/博客/标签/三明治

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

/博客/三明治

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

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

但我现在收到此错误:

NoMethodError in TagsController#show

undefined method `cache_key' for nil:NilClass

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

我还将完整的跟踪记录作为要点:

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

4

1 回答 1

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 不同的参数名称。

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

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

于 2013-11-20T22:01:51.953 回答