Я использую устройство для аутентификации. При регистрации пользователей создайте имя профиля, которое я хотел бы использовать в качестве маршрута профиля. Таким образом, это может выглядеть так: 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) %>
Это приводит к следующей ошибке маршрутизации: Нет совпадений маршрутов {: controller => "users",: action => "show",: id => nil} – lflores
Как вы используете помощник пути в представлении? –
Это был просто пример, я предполагаю, что @user возвращает нуль. Вам нужно передать пользователя в помощник любым способом. Я не знаю, как выглядит ваш «главный» контроллер, но вам нужно установить user var, а затем передать это в помощник, как в моем примере. – messick