Поиск form_tag не работает Ruby on Rails - PullRequest
0 голосов
/ 03 ноября 2019

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

Это моя форма, это show.html.erb. Я хочу, чтобы информация также отображалась в этом представлении:

<%= form_tag product_path, method: :get do %>
  <%= text_field_tag :cep,
     params[:cep],
     class: "form-control mr-2",
     placeholder: "13087560",
     maxlength: 8
  %>
  <%= submit_tag "find", class: "btn-flat my-3 my-0" %>
<% end %>

<p class="product-data"><%= @uf %></p>

Это мой контроллер:

class ProductsController < ApplicationController

require 'open-uri'

  def index
    if params[:query]
      @products = Product.search(params[:query])
    else
      @products = Product.all
    end
    respond_to do |format|
      format.html
      format.js
    end
  end

  def show
    @product = Product.find(params[:id])
  end

  def uf_search
    if params[:cep]
      @uf = JSON.parse(open("https://viacep.com.br/ws/#{params[:cep]}/json/").read)
      @uf = @uf['uf']
      @uf
    end
  end
end

Это не дает мне никаких ошибок, но информация просто не отображается напредставление ... и значение @uf равно nil.

Ответы [ 2 ]

0 голосов
/ 04 ноября 2019

человек!

На самом деле проблема была в контроллере ... Я сделал это, и все заработало, как я ожидал:

class ProductsController < ApplicationController

require 'open-uri'

  def index
    if params[:query]
      @products = Product.search(params[:query])
    else
      @products = Product.all
    end
    respond_to do |format|
      format.html
      format.js
    end
  end

  def show
    @product = Product.find(params[:id])
    uf_search # inserting the uf_search here solved it
    respond_to do |format|
      format.html
      format.js
    end
  end

  def uf_search
    if params[:cep]
      url = "https://viacep.com.br/ws/#{params[:cep]}/json/"
      address = JSON.parse(open(url).read)
      @uf = address['uf']
      @city = address['localidade']
    end
  end
end

Я не уверен, что это хорошая практика, потому что я только начинаю, но это сработало! Спасибо вам всем! :)

0 голосов
/ 03 ноября 2019

Ваша форма URL является проблемой. Это должно быть что-то вроде этого: <%= form_tag uf_search_products_path, method: :get do %>

и убедитесь, что вы добавили get :uf_search в маршруты сбора продуктов.

...