Rails: разрешенные параметры контроллера не отображаются в поле зрения - PullRequest
0 голосов
/ 28 мая 2020

Rails 5. Пытаюсь сделать простую форму поиска, а потом показывать результаты в индексе контроллера. К сожалению, мои "search_params" теряются между контроллером и представлением.

Частичный поиск

#_search.html.erb
<%= form_with( url: flights_path, method: "GET") do %>
  <%= select_tag(:from, options_for_select(@airport_codes) ) %>
  <%= select_tag(:to, options_for_select(@airport_codes)) %>
  <%= number_field_tag(:passenger_count, 2, in: 1..10) %>
  <%= select_tag(:date, options_for_select(@search_dates), include_blank: "(Any)", required: false ) %>
  <%= submit_tag("Search") %>
<% end %>

Консоль при отправке:

Parameters: {"utf8"=>"✓", "from"=>"YVR", "to"=>"YYC", "passenger_count"=>"2", "date"=>"", "commit"=>"Search"}

Контроллер:

#flights_controller.rb
class FlightsController < ApplicationController

def index
  @search = search_params
  @airport_codes = #list of airports
  @search_dates = #list of future dates
  @flight_results = Flight.search(search_params).includes(:to, :from)
end

def search_params
  params.permit(:from, :to, :passenger_count, :date)
end
end

Но когда я перехожу к index. html .erb ...

#index.html.erb
  <%= render "search" %>
  <%= @search %>

Строка @search отображается как {} Когда я помещаю @search в контроллер, все выглядит в консоли нормально, но потом вроде пропадает. Что я здесь делаю не так?

1 Ответ

0 голосов
/ 28 мая 2020

Хорошо, ребята. Проблема заключается в строке:

params.permit(:from, :to, :passenger_count, :date)

Для того, чтобы данные проталкивались в представление, он должен иметь там метод require, например:

params.require(:search).permit(:from, :to, :passenger_count, :date)

Это означает перенастройку каждой строки тега вручную в форме поиска, например, так:

<%= label_tag( "search[from]", "Departing from:") %>

Я, должно быть, неправильно использовал помощников. Было бы здорово узнать, почему требуется 'require'.

...