2013-04-01 4 views
1

Я использую устройство для аутентификации. При регистрации пользователей создайте имя профиля, которое я хотел бы использовать в качестве маршрута профиля. Таким образом, это может выглядеть так: www.myapp.com/profile-name. Проблема, с которой я сталкиваюсь, заключается в том, что маршруты не идут в нужное место.Ошибка путаницы Rails из-за: id

routes.rb

resources :majors do 
    resources :reviews 
end 

devise_for :users 

... 

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

Я поместил: User_Profile маршрут в нижней части моего файла маршрутов. Часть моих рек маршрутов выглядит следующим образом:

major GET   /majors/:id(.:format) majors#show 
user_profile GET  /:id(.:format)   users#show 

На странице профиля (myapp.com/my-custom-profile-name) нет никаких проблем. Но на странице майоров показывают, что я использую user_profile_path для ссылки на профиль пользователя, а URL-адрес - www.myapp.com/:id - с идентификатором id: майор: id. Таким образом: id майора смешивается с идентификатором user_profile: id.

Моих пользователей контроллер выглядит следующим образом:

def show 
    @user = User.find_by_profile_name(params[:id]) 
    @reviews = @user.reviews 
end 

Я изменил URL вокруг, протестировал его на различных областях, изменил порядок моего файла маршрутов, поиск и проверил это в течение всего дня. Я не могу понять, что мне не хватает. Я думаю, что это действительно просто, но это ускользает от меня. Есть идеи?


РЕШЕНИЕ:

Решение было сначала получить маршруты правильно. Так как я создал пользовательский, динамический URL (myapp.com/user-profile-name) мне нужно, чтобы вызвать идентификатор в маршруте:

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

Это изменило мои маршруты, чтобы выглядеть следующим образом:

id GET  /:id(.:format)    users#show 

Пользователи обмениваются отзывами и их имя публикуется рядом с их обзором. У меня возникли проблемы с привязкой к их профилю от их имени в их обзоре. Я был в состоянии сделать это на взгляд, как это:

<%= link_to review.user.profile_name, id_path(review.user.profile_name) %> 

ответ

1

Чтобы добраться до определенного профиля пользователя, вам необходимо пройти профиля пользователя ID в User_Profile с именем маршрута:

user_profile_path(@user)

+0

Это приводит к следующей ошибке маршрутизации: Нет совпадений маршрутов {: controller => "users",: action => "show",: id => nil} – lflores

+0

Как вы используете помощник пути в представлении? –

+0

Это был просто пример, я предполагаю, что @user возвращает нуль. Вам нужно передать пользователя в помощник любым способом. Я не знаю, как выглядит ваш «главный» контроллер, но вам нужно установить user var, а затем передать это в помощник, как в моем примере. – messick

Смежные вопросы