Ruby on Rails 路由别名



我正在尝试将路由别名添加到 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"传递的任何参数。

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

最新更新