Как добавить: id в link_to для рельсов? - PullRequest
0 голосов
/ 23 сентября 2018

Моя цель состоит в том, чтобы предоставить продавцам (Пользователю) возможность загружать файлы покупателям (Покупателю) на своей странице Пользователь, Продажи (страница своей истории продаж).Я использую Devise для ролей пользователей.

У меня есть ссылки, например, у меня работает URL " localhost: 3000 / orders / 28 / sales_uploads / new ", поэтому я могу загрузитьна конкретную продажу.

Хотя на странице «Продажи» для пользователя / продавца я хочу, чтобы они могли загружать файл покупателю (покупатели покупают товар, затем продавец загружает файл после покупки - каждыйпродукт / покупка будет изготовлен по индивидуальному заказу), либо через страницу продаж, желательно, либо нажав ссылку - вот где у меня возникают проблемы.Я хочу, чтобы продавец щелкнул ссылку «Загрузить», которая затем направит его на страницу для загрузки файла для заказа.

В представлении страницы «Продажи» (views / sales_uploads / sales) у меня есть

 <%= link_to "Upload", new_order_sales_upload_path(@order, order) %>

но я получаю сообщение об ошибке, что нет order_id.

Как мне сделать так, чтобы ссылка ссылалась на заказ с идентификатором заказа.

У меня есть

 <% @orders.each do |order| %>

так что это циклично, и я не могу понять, почему это не сработает.

Вот мой github https://github.com/brandnamewater/digitalcommerce

Как вы будетесмотри в представлении выше, у меня работает велосипед.Я предполагаю, что у меня есть проблема в другом месте, возможно, в контроллере.Хотя я просто не могу понять это.

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

Я регулярно занимаюсь кодированием всего несколько недель, и я уверен, что это что-то очень важное для некоторых из вас, но я не могу понять это.Я пытался сделать это в течение 2 ночей, и никакой другой поиск в Google, поиск в стеке и т. Д. Не помогли.

Ответы [ 2 ]

0 голосов
/ 23 сентября 2018

Правильный код, который вы ищете:

<% @orders.each do |order| %> <%= link_to "Upload", new_order_sales_upload_path(order) %> <% end %>

Если вы запустите bin/rails routes | grep new_order_sales_upload в своем терминале, он предоставит некоторый вывод, который покажет нам метод вспомогательного маршрута итакже любые параметры, которые нам нужно передать в помощник маршрута.

Для вашего случая он выдаст

new_order_sales_upload GET    /orders/:order_id/sales_uploads/new(.:format)                                            sales_uploads#new

Это показывает, что помощник маршрута называется new_order_sales_upload, и что он ожидает одинпараметр :order_id.

Если бы вы вывели на экран @order, например <%= @order.inspect %>, вы бы обнаружили, что это nil, поскольку эта переменная экземпляра не установлена.

Вашloop @orders.each устанавливает переменную с именем order.

Причина, по которой ваш ответ <%= link_to "Upload", new_order_sales_upload_path(order, @order) %> работает, заключается в том, что помощник по маршруту использует только первую переменную order, а вторая @order - nil и не используется.

Вы можете узнать больше о маршрутизации в рельсах из официального руководства https://guides.rubyonrails.org/routing.html

0 голосов
/ 23 сентября 2018

Ну, я перепутал заказ

Это было:

<%= link_to "Upload", new_order_sales_upload_path(@order, order) %>

и должно было быть:

 <%= link_to "Upload", new_order_sales_upload_path(order ,@order) %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...