функция поиска не работает - Ruby на рельсах - PullRequest
0 голосов
/ 25 марта 2020

Я новичок в Ruby на Rails и пытаюсь реализовать функцию поиска с простой формой для фильтрации результатов доступности. После того, как я нажал кнопку поиска, она все еще остается на той же странице и не запускает функцию поиска в контроллере. Разрешенное является ложным. Мне интересно, почему это может произойти. Что-то не так с search_params, которые я написал? Версия Rails: 6.0.2.1.

views / available / _searchform. html .erb

<form>
    <div id="aDiv">
        <%= simple_form_for :search, :url => search_rides_result_path, :method => :get do |f| %>
        <div class="form-row">
            <div class="form-group col-md-2">
                <%= f.input :start_city, label: 'Start City', class: "form-control", error: 'Start address is mandatory, please specify one' %>
            </div>
            <div class="form-group col-md-4">
                <%= f.input :start_street_address, label: 'Start Street Address', class: "form-control" %>
            </div>
        </div>
        <div class="form-row">
            <div class="form-group col-md-2">
                <%= f.input :end_city, label: 'Destination City', class: "form-control" %>
            </div>
            <div class="form-group col-md-4">
                <%= f.input :end_street_address, label: 'Destionation Street Address', class: "form-control" %>
            </div>
        </div>
        <div class="form-row">
            <div class="form-group col-md-4">
                <%= f.input :trip_time, as: :datetime, inline_label: 'Yes, remember me', class: "form-control" %>
            </div>
            <div class="form-group col-md-2">
                <%= f.input :lowest_acceptable_price, label: 'Expected Price', class: "form-control" %>
            </div>
        </div>
            <%= f.submit "Search", class: "btn btn-primary" %>
        <% end %>
    </div>
</form>

routs.rb file.

  get 'search_rides', to: "availabilities#index"
  get 'search_rides_result', to: "availabilities#search"

availableabilities_controller.rb

  def index
    @availabilities = Availability.unmatched
  end

  def search
    @availabilities = Availability.unmatched.search(search_params[:start_city])
  end

  def search_params
    params.require(:search).permit(:start_city, :start_street_address, :end_city, :end_street_address, :trip_time, :lowest_acceptable_price)
  end

модели / наличие. Rb

class Availability < ApplicationRecord
    has_many :users, :through => :posts
    has_one :request
    scope :unmatched, ->{ where(matched_request_id: -1) }

    def self.search (params)
        puts "start searching"
        results = city_matches(start_city, end_city, params[:start_city], params[:end_city]) 
        return nil unless results
        results
    end

1 Ответ

1 голос
/ 26 марта 2020

Вместо того, чтобы использовать 2 разных метода для поиска, попробуйте объединить оба в методе индекса. Ваш метод индекса теперь будет выглядеть следующим образом:

def index
  if params[:search]
    @availabilities = Availability.unmatched.search(search_params[:start_city])
  else
    @availabilities = Availability.unmatched
  end
end

Измените форму url на search_rides_path. Таким образом, результаты поиска будут представлены в том же виде при отправке формы.

...