У меня есть контроллер с именем 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
.
Если вам нужна эта информация: это приложение является торговой точкой, поэтому пользователь, делающий заказ, является владельцем магазина или его сотрудниками, и клиент не будет иметь доступа к приложению, но его следует сохранить в заказе. для статистических целей.