Как фильтровать по параметрам и пользовательскому вводу в Rails - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь отобразить в моем приложении только те строки, которые относятся к определенным состояниям.Я могу сделать это долгий путь в Javascript, но я бы предпочел лучше понять Rails и запросы в контроллере.Я хочу перевести пользователей на другую страницу, а затем показать им только, что компании в этом штате.Было бы здорово не связывать их с другой страницей.Кто-нибудь знает, как это сделать?

Вот что у меня в контроллере

  def vendors
    @vendors = Collective.where(sort: 'Vendor').all
    @vendors = @vendors.where(params[:state])
  end

Мой маршрут

get '/vendors/:state', to: 'collectives#vendors'

Затем я использую стереотипный метод для печатитаблица в файле html.erb.

<% @vendors.each do |company| %>

<tr>
  <td><%= company.name %></td>
  <td><%= company.state %></td>
 etc...

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Использование сессий вместо параметров URL.

Это более или менее то, что вы можете сделать, извините, если это не совсем работает для вашего случая, просто чтобы дать идею.

# view collectives/index (or whatever you have)

<%= form_tag (controller: :collectives, action: :set_status_filter, method: :post) do %>
  <%= select_tag(:session_status_filter, options_for_select(@your_list_of_options_for_the_filter)) %>
  <%= submit_tag "Set filter" %>
<% end %>


# collectives controller

def index # or whatever, this is the page containing the form and the list to show
  @vendors = Collective.where(sort: 'Vendor').all
  if session[:session_status_filter] == # etcetera
    then @vendors = @vendors.where(state: session[:session_status_filter]) # for example
  else # another option just in case, etcetera
  end
end

def set_status_filter # this action is called by the form
  session[:session_status_filter] = params[:session_status_filter]
    respond_to do |format|
      format.html { redirect_to *** the view where the form is placed ***, notice: 'the filter is set to: ....' + session[:session_status_filter] } # after the session variable is set the redirects goes to index which uses the session to filter records
    end
end

params[:session_status_filter] передается формой в collectives#set_status_filter.Значение используется для установки переменных сеанса.После этого действие collectives#set_status_filter перенаправляет на индекс или на любую страницу, на которую вы поместили форму и список для отображения.

0 голосов
/ 05 июня 2018

Если код вашего контроллера изменится где следующим образом:

def vendors
  @vendors = Collective.where(sort: 'Vendor').all
  @vendors = @vendors.where(state: params[:state])
end

или лучше:

def vendors
  @vendors = Collective.where(sort: 'Vendor', state: params[:state])
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...