【问题标题】:Rails 4 search Multiple ParamsRails 4搜索多个参数
【发布时间】:2026-02-08 19:00:01
【问题描述】:

如果存在两个参数,我正在寻找搜索结果,但我被发送到 car_show_path,但应该有结果。

型号

class Car < ActiveRecord::Base
  def self.search(car_number, car_model) 
    where(['car_number = ? AND car_model = ?', "%#{car_number}%", "%#{car_model}%"])
  end
end

控制器展示

 @search = Car.search(params[:car_number], params[:car_model])
   if @search.present?
       @search
    else
     redirect_to car_path, notice: "Not a valid combination"
    end

表格

<%= simple_form_for :search, url: car_show_path do |f| %>
  <%= f.input :car_number, :collection => @car.collect {|c| [c.number]}, :include_blank => false %>
  <%= f.input :car_model, placeholder: "Car Model" %>
  <%= f.button :submit, 'Generate', class: 'btn' %>
<% end %>

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4


    【解决方案1】:

    你做错了。如果您查看服务器日志中生成的 params 哈希,您会看到类似 :search =&gt; {:car_model =&gt; "value", :car_number =&gt; "Value"} 的内容。这意味着:car_model:car_number 的值不能用params[:car_model]params[:car_number] 检索,而应使用params[:search][:car_model]params[:search][:car_number]

    @search = Car.search(params[:search][:car_number], params[:search][:car_model])
    if @search.present?
      @search
    else
      redirect_to car_path, notice: "Not a valid combination"
    end
    

    【讨论】:

    • 我能够在服务器日志中查看 car_model 条目,但未提取集合 car_number。下拉选择工作正常,但没有通过。 @car = Car.group(:car_number) 是变量。
    • @DollarChills 你能把服务器日志贴在这里吗?
    • 由 CarController 处理#show as HTML 参数:{"utf8"=>"✓", "authenticity_token"=>"CzlNZlINufrHVGrkW9GLvZqiRWBtD2mplrlFuSMTKIEZ1fe5lK1UdEey1KlFSa0IOHgp0c2Po5GgkyZkgPbkOA==", "search"=>{"car_ ", "car_model"=>"Toyota"}, "commit"=>"Generate"} Auslot Load (0.3ms) SELECT cars.* FROM cars WHERE (car_number = '' AND car_model = 'Toyota')重定向到localhost:3000/cars Completed 302 Found in 1ms (ActiveRecord: 0.3ms)
    • 我认为集合选择在 Rails 4 中的工作方式不同,可能是错误的。
    • 我已经解决了这个问题。我删除了我收藏中 [c.number] 周围的括号,它起作用了。我将在@Pavan 帮助我解决主要问题时给出答案。干杯!
    【解决方案2】:

    我看到了您提供的代码。我相信您编写的代码需要一些改进。因此,我重新编写了代码,可以解决您的问题并实现您的目标。这里是:

    #/app/models/car.rb
    
    class Car < ActiveRecord::Base
      def self.search(cn, cm) 
        where('car_number = ? AND car_model = ?', cn, cm)
      end
    end
    
    #/app/controllers/cars_controller.rb
    
    class CarsController < ApplicationController
    
      def search
        @result = Car.search params[c_number], params[c_modal]
      end
    end
    
    
    #/app/views/cars/search.html.erb
    #you can generate similar form with simple_form_for
    
    <form action="/search" method="/get" >
      <input type="text" name="c_number"
      <input type="text" name="c_modal">
      <input type="submit" value="search">
    </form>
    
    <% if !@result.any? %>
      Not a valid combination
    <% end %>
    
    <% @result.each do |r|%>
      <%= r.car_number %>
      <%= r.car_modal %>
    <% end %>
    
    
    #/config/routes.rb
    
    get "/search" => "cars#search"
    

    注意:以上代码是我的最佳实践,并未在本地执行。

    希望对你有帮助!!!

    【讨论】:

      【解决方案3】:

      您将发送到搜索方法的查询参数中的相同值放入两个占位符中。这似乎不对。

      【讨论】: