У меня возникают проблемы с определением маршрутов, которые я не хочу вкладывать друг в друга.
У меня есть следующие маршруты:
resources :foos
resources :bars
resources :bazs do
resources :hellos
resources :worlds
end
Все модели foo, bar и baz принадлежат пользовательской модели. Я не хочу вкладывать еще один слой, но я хочу иметь префикс в своем URL-адресе, который соответствует атрибуту постоянной ссылки пользователя (аналогично каждому репозиторию github с префиксом имени пользователя). Итак, у меня есть предварительный фильтр на всех моих контроллерах.
def get_scope
@user = User.find_by_permalink(params[:permalink])
end
Изменен to_param благодаря @cowboycoded
class User < ActiveRecord::Base
def to_param
permalink
end
end
Я обернул эти маршруты с
scope ":permalink", :as => :user do
#nested routes here
end
Теперь все работает нормально, пока я передаю @user каждому неиндексному маршруту. Это не кажется очень сухим, чтобы вернуться ко всем моим представлениям и заменить (@foo) на (@user, @foo), когда он уже определен.
Если я не ошибаюсь, метод to_param просто заменяет :id, чтобы URL-адреса, такие как /users/:id, отображались как пользователи/постоянная ссылка вместо пользователей/1. Я попытался использовать этот :id в своей области, но он конфликтует с параметром :id foo и все ломает. Может быть, есть связь с путями, которые мне не хватает?
Спасибо за любые предложения, которые у вас могут быть!