Как отфильтровать индекс для истинного значения в Rails 4 - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь отфильтровать список индексов базы данных по тому, является ли значение истинным.Это возможно?Внутри контроллера я пытаюсь это сделать, что не приводит к ошибке, но не тянет список индексов, который я ищу.

Контроллер:

def index
        @people = Person.all

        if params[:filter_by]
            @people = Person.where(:position => params[:filter_by])
        elsif 
            @people = Person.where(:ra_cs, params[:filter_by] == "true")
        else
            @people = Person.all
        end
    end 

def person_params
        params.require(:person).permit(
            :fname, :lname, :user_name, :position, :title, :prefix, :focus1, :focus2, :focus3, :ra_cs, :ra_hn, :ra_mg, :ra_nb, :ra_ne) 
    end

Запись для базы данных представляет собой флажок, который вводит значение 1 или 0 в поле.

Я не уверен, какой другой код может быть задействован, пожалуйста, дайте мне знать, если мне нужно добавить что-нибудь еще.

Ответы [ 2 ]

2 голосов
/ 03 июня 2019

Другой вариант - использование динамических where, где параметры.

def index
  @people = Person.all

  @people = @people.where(params[:filter_by] => true) if params[:filter_by].present?
end

Если вы не знаете, какой пользователь фильтрует по каждому атрибуту, вы можете добавить белый список.

def index
  @people = Person.all

  allowed = %w[ra_cs ra_aa ra_bb ...]
  @people = @people.where(params[:filter_by] => true) if params[:filter_by].in?(allowed)
end

Во втором примере вам не нужно проверять наличие, так как будет возвращено nil или "", которого нет в allowed. Это означает, что выражение , если будет равно false.

2 голосов
/ 03 июня 2019

Вам необходимо изменить код:

def index
  if params[:filter_by].present?
    case params[:filter_by]
    when 'ra_cs'
      @people = Person.where(ra_cs: true)
    when 'ra_aa'
      @people = Person.where(ra_aa: true)
    when 'ra_bb'
      @people = Person.where(ra_bb: true)
    else
      @people = Person.where(position: params[:filter_by])
    end
  else
    @people = Person.all
  end
end 

Кстати, elsif необходимо условие.

...