Настроить рельсы URL с именем пользователя
Я хочу скопировать страницу профиля в Твиттере и получить URL с именем пользователя " http://www.my-app.com/username", и хотя я могу вручную ввести это в адресную строку и перейти на страницу профиля, я могу " t ссылка на пользовательский URL.
Я думаю, что проблема в маршрутах - вот код в моих маршрутах.
map.connect '/:username', :controller => 'users', :action => 'show'
Также у меня есть Question
а также Answer
модели, и я хочу связать их с настроенным URL-адресом, например, так:
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 => 'портфолио'