2013-09-17 6 views
3

Я пытаюсь добавить псевдоним маршрута в рубин на приложении rails. Вот мой существующий файл маршрутизации:Ruby on Rails Routing Alias ​​

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

Который работает отлично подходит для маршрутов, таких как:

/блог/теги/сэндвичи

Однако, я хотел бы добавить псевдоним (без перенаправления) несколько специальных тегов, так что я могу ссылаться на них, как это:

/блог/сэндвичи

Я добавил это сопрягая заявление в моей/блоге сферы:

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

Но теперь я получаю эту ошибку:

NoMethodError in TagsController#show 

undefined method `cache_key' for nil:NilClass 

Похоже, это получение направляется на правильный метод, но кэширование (?), похоже, возникла.

Я также поставил полный след вверх как суть:

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

+0

Можете ли вы опубликовать строку, которая вызывает ошибку? Может быть, трассировка стека тоже – MrYoshiji

+0

Я добавил полный след выше. – Whit

+0

Что такое линия 13 вашего контроллера? – MrYoshiji

ответ

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.

Это должен быть любой параметр, который вы обычно проходите со значением «бутерброды».

Не видя своей модели, я не могу догадаться, что это такое. (tag ?, name ?,)