2013-09-03 4 views
0

Я хочу заменить обычный маршрут /users/:id, который создается командой resources, с более абстрактным маршрутом /profile. Невозможно просмотреть другие профили пользователей в моем приложении, и поэтому текущий маршрут не нужен конкретным.Abstracting rails route

Я попытался переписать маршрут, созданный «ресурсы: пользователи» с:

get '/profile', to: 'users#show' 

и другими отклонениями и комбинациями, но не могу показаться, чтобы получить это право. Либо контроллер не может найти пользователя из-за отсутствия id, либо просто не может найти маршрут.

Спасибо за помощь!

+1

/users/me может быть лучшим путем, в противном случае создать контроллер профиля со своей логикой – apneadiving

ответ

1

Вы можете использовать этот код в routes.rb файле:

resources :users, :except => :show 
    collection do 
    get 'profile', :action => 'show' 
    end 
end 

Он будет генерировать url "/ users/profile".

Но если вы хотите использовать только '/ profile', тогда не создавайте маршрут как сбор внутри блока ресурсов пользователей.

resources :users, :except => :show 
get 'profile' => "users#show", :as => :user_profile 

Он перенаправит '/ profile', чтобы показать действие в контроллере пользователей.

0

Я предлагаю просто добавить users/me маршрут, указывающий на show действия Вашего UsersController так:

resources :users, only: [] do 
    collection do 
    get 'me', action: :show 
    end 
end 
0

Вы также можете использовать ключевое слово match в файле routes.rb.

match 'users/:id' => 'users#show', as: :user_profile, via: :get