Rails select_tag для использования области видимости для простого фильтра - PullRequest
0 голосов
/ 22 октября 2018

Я все еще изучаю Rails, и в моем проекте приложение администратор должен иметь возможность фильтровать все запросы на отпуск по статусу (логическое поле в дБ), используя раскрывающийся список (одобрен для истины, в ожидании ложь).Я думаю, что все правильно заявлено в моем контроллере и модели, однако я не знаю, как реализовать это в представленииЯ пытался проследить за историческим блогом Остина и Используя select_tag multiple => true, чтобы получить объединенную тему , но все же я не понял, как это сделать.

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

def index
 @leave = Leave.new
 @leaves = Leave.all.order(created_at: :desc).includes(:user)

 @leaves = Leave.find_by('select = ?', params[:status])
end

модель листьев.rb

scope :approved, -> { where(status: true) }
scope :pending, -> { where(status: false) }

belongs_to :user, optional: true

просмотр index.html.erb

<%= form_tag(action: :index) do %>
 <div class="input-group">
  <%= select_tag :status, options_for_select([['Approved', Leave.approved], ['Pending', Leave.pending]]) %>
  <%= submit_tag 'Filter' %>
 </div>
<% end %>

1 Ответ

0 голосов
/ 22 октября 2018

Измените свой код на этот

def index
  @leave = Leave.new # as you have added it, won't affect what we want to achieve.
  #if params have status then only you've to show 
  #the selected ones otherwise you'll be showing all 
  #of them. right?
  if params[:status].present?
    @leaves = Leave.where(status: params[:status])
    #dont use find_by it will return only one record instead of array.
  else
    @leaves = Leave.includes(:user).order(created_at: :desc)
  end
end


<%= form_tag(url: admin_leaves_path, method: :get) do %>
  <div class="input-group">
    #Leave.approved will hit database from view. which is not recommended 
    #instead of that try using values which will be accessed in controller
    #via params and then you can perform actions according to it.
    <%= select_tag :status, options_for_select([['Approved', true], ['Pending', false]]) %>
    <%= submit_tag 'Filter' %>
  </div>
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...