Проблема: когда пользователь не вошел в систему, он не имеет доступа к своей странице Показа заказов. Итак, я создал метод подтверждения заказа в своем OrdersController следующим образом:
def order_confirmation
@order = Order.find_by(order_token: params[:order_token])
end
Теперь, как вы видите, я сейчас использую order_token
find_by
, который использует переопределение to_param
.
Я хочу избегать использования переопределения, поскольку оно применяется ко всему контроллеру, и я не нашел способа не использовать его только для одного метода. Это портит мои связанные модели, как вы можете видеть здесь: Почему my: order_token передается как my: order_id при отправке файла формы?
Как мне сделать так, чтобы мой маршрут:
resources :orders do
get 'order_confirmation', :on => :member
end
без использования переопределения to_param
использует URL-адрес, такой как:
example.com/orders/:order_token/order_confirmation
Обновление и возможный ответ:
Я сделаю это ответом после дальнейшего тестирования.
При использовании:
resources :orders, param: :order_token do
get 'order_confirmation', :on => :member
end
В моих маршрутах я могу перейти по URL, который я хочу. Хотя после создания заказа он все же указывает мне маршрут, используя: id.
Затем я изменяю свое перенаправление на:
redirect_to order_confirmation_order_path(@order.order_token)
И это работает.
Я также удалил свое to_param
переопределение.