我正在尝试将路由别名添加到 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
我认为你想要的是这样的东西:
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 不同的参数名称。
它应该是您通常使用值"sandwiches"传递的任何参数。
没有看到你的模型,我猜不出那是什么。 (标签?,名称?,)