Настройка маршрута для метода поиска с использованием токена, а не ID? - PullRequest
0 голосов
/ 09 января 2019

Проблема: когда пользователь не вошел в систему, он не имеет доступа к своей странице Показа заказов. Итак, я создал метод подтверждения заказа в своем 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 переопределение.

Ответы [ 2 ]

0 голосов
/ 14 января 2019

При использовании:

  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.

0 голосов
/ 09 января 2019

Короче, вам захочется resources :orders, param: :order_token

, а затем в вашем заказе модель

class Order < ApplicationRecord
  def to_param
    order_token
  end
end

это будет иметь побочные эффекты во всем приложении.

Направляющие Rails содержат дополнительную информацию о Переопределение именованных параметров маршрута

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...