Попытка получить переменную из другого контроллера с response_to - PullRequest
0 голосов
/ 21 января 2020

У меня есть контроллер с именем Orders, а другой - с именем Customers. Итак, на моем Order я хочу сохранить, кто мой customer. У этих двух моделей есть ассоциации.

Итак, в моем новом представлении заказа я использовал одну форму, чтобы указать, кто является клиентом по его «cpf» (cpf - это документ, который мы используем здесь, в Бразилии, для идентификации граждан) и я сделал это:

<%= form_tag search_customer_path, method: :get do %>
  <%= text_field_tag :cpf, params[:cpf], placeholder: 'CPF' %>
  <%= button_tag type: :submit, class: "btn btn-primary" do %>
    <%= 'Selecionar' %>
  <% end%>
<% end%>

Чтобы сделать это search_costumer_path и сделать checkout_path (который мы будем использовать позже), я выберу это routes.rb:

get '/cart/checkout', to: 'orders#new', as: :checkout #-> This gives me the checkout_path
get 'search_customer', to: 'customers#search_customer'

А на моем customers_controller.rb я так и сделал:

def search_customer
  @customer = Customer.find_by!(cpf: params[:cpf])
  respond_to do |format|
    format.html { redirect_to checkout_path } #-> @customer should be available in the checkout_path view, but it's not
  end
end

Проблема в том, что когда приложение возвращается к checkout_path, @customer равно nil.

Дополнительная информация: Чтобы попытаться найти ошибку, я заменил действие customers_controller search_customer на byebug, чтобы я мог вручную написать код на сервере, чтобы проверить, передаются ли параметры и устанавливается ли переменная, и там у меня нет проблем. Я получил что-то вроде этого:

Input> params
Return> <ActionController::Parameters {"cpf"=>"05864899995", "button"=>"", "controller"=>"customers", "action"=>"search_customer"} permitted: false>
Input> @customer = Customer.find_by(cpf: params[:cpf])
Return> #<Customer id: 2, name: "Thiago Fiorese", cpf: "05864899995", cel_phone: "83984572906", email: "thiagofiorese@gmail.com", address: "Rua Helena Meira Lima", neighborhood: "Tambaú", city: "João Pessoa", state: "PB", zipcode: "58039081", complement: "Apto 1001", reference: "Ao lado do Motiva", created_at: "2020-01-20 19:36:16", updated_at: "2020-01-20 19:36:16", number: "691">
Input> @customer.name
Return: "Thiago Fiorese"

Итак ... параметры передаются, и переменная теоретически сохраняется, поскольку я использовал тот же код в своем действии search_customer. Я предполагаю, что проблема заключается в отправке этой переменной обратно на страницу оформления заказа (контроллер заказов) с respond_to, поскольку, когда я перенаправлен обратно на checkout_path, @customer равен nil.

Если вам нужна эта информация: это приложение является торговой точкой, поэтому пользователь, делающий заказ, является владельцем магазина или его сотрудниками, и клиент не будет иметь доступа к приложению, но его следует сохранить в заказе. для статистических целей.

1 Ответ

0 голосов
/ 21 января 2020

Вы можете просто передать переменную @ customer.id в качестве параметра следующим образом:

respond_to do |format|
  format.html { redirect_to checkout_path(customer_id: @customer.id }
end

, а затем в вашем orders_controller

def new
  @customer = Customer.find(params[:customer_id])
  ...
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...