【问题标题】:Search form_tag not working Ruby on Rails搜索 form_tag 不工作 Ruby on Rails
【发布时间】:2020-02-28 18:45:47
【问题描述】:

我真的被卡住了......这似乎很简单,但我真的错过了一些东西...... 所以,我正在构建一个产品展示页面。我想制作一个表单字段,在输入邮政编码时返回用户的状态。

这是我的表单,它是 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。

【问题讨论】:

  • 这里没有问题。我认为表单网址有问题。我猜该请求不会执行 uf_search 操作。检查表单 url 和 routes.rb。

标签: ruby-on-rails json parsing search model-view-controller


【解决方案1】:

您的表单网址是问题所在。它应该是这样的: &lt;%= form_tag uf_search_products_path, method: :get do %&gt;

并确保您在产品收集路线中添加了get :uf_search

【讨论】:

    【解决方案2】:

    人!

    实际上问题出在控制器上……我这样做了,它按我的预期工作:

    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
    

    我不确定这是否是一个好习惯,因为我才刚刚开始,但它奏效了!谢谢你们! :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-05
      • 2023-04-08
      • 1970-01-01
      • 2012-07-21
      • 2010-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多