Настроить рельсы URL с именем пользователя

Я хочу скопировать страницу профиля в Твиттере и получить URL с именем пользователя " http://www.my-app.com/username", и хотя я могу вручную ввести это в адресную строку и перейти на страницу профиля, я могу " t ссылка на пользовательский URL.

Я думаю, что проблема в маршрутах - вот код в моих маршрутах.

map.connect '/:username', :controller => 'users', :action => 'show'

Также у меня есть Question а также Answer модели, и я хочу связать их с настроенным URL-адресом, например, так:

http://www.my-app.com/username/question/answer/2210

4 ответа

Решение

Там нет ничего плохого в вашем маршруте. Просто не забудьте определить его в конце, после определения всех других маршрутов. Я также рекомендовал бы использовать маршруты RESTful, и только если вы хотите, чтобы URL лучше выглядели, используйте именованные маршруты. Не использовать map.connect, Вот хорошее чтение о маршрутах Rails.

Вот как это может выглядеть:

map.resources :questions, :path_prefix => '/:username' do |question|
  question.resources :answers
end

map.resources :users

map.user '/:username', :controller => 'users', :action => 'show'

Просто черновик вы можете продлить.

Для создания URL вам нужно определить to_param метод для вашей модели пользователя ( читайте здесь).

class User < ActiveRecord::Base
  def to_param 
    username
  end
end

Я знаю, что эти вопросы старые, но это поможет кому-то.

Вы можете попробовать ниже. Я использовал его в проекте rails 4, и все, кажется, работает отлично. Причина для as: :admin это я также имел resources posts вне этой области. Это добавит admin к помощнику звонки, например, admin_posts_path

scope ":username", module: 'admin', as: :admin do
  get '', to: 'profiles#show'
  resources :posts
end

Я использовал как это

В части просмотра

portfolio.user.name,:id => портфолио) %>

и в rout.rb

map.show_portfolio "портфолио /: имя пользователя",:action => 'show_portfolio',:controller => 'портфолио'

Другие вопросы по тегам