Как проверить наличие значения в "params [: attribute]" - PullRequest
0 голосов
/ 25 января 2020

Когда у меня есть такой массив:

[5] pry(#<HomeController>)> params["search"]["sources"] => [""]

Как проверить, чтобы этот экземпляр был истинным?

Я попробовал следующее, но это не удалось:

[8] pry(#<HomeController>)> params[:search][:sources].empty?
=> false
[9] pry(#<HomeController>)> params[:search][:sources].nil?
=> false
[3] pry(#<HomeController>)> params["search"]["sources"].empty?
=> false
[4] pry(#<HomeController>)> params["search"]["sources"].eql? ""
=> false
[10] pry(#<HomeController>)> params[:search][:sources].blank?
=> false
[11] pry(#<HomeController>)> params[:search][:sources].any?
=> true

Когда значение атрибута моего params пусто или равно "", я хочу сделать что-то определенное c.

Я бы хотел, чтобы он был условным для оператора if, поэтому в приведенном выше случае он должен возвращать true.

Вот фактический полный params Я проверяю:

 params
=> <ActionController::Parameters {"search"=><ActionController::Parameters {"keywords"=>"", "types"=>[""], "categories"=>["", "", "", "", "", "", "", "Hockey", "", "", "", "", "", "", "", "", "", "", "", "", ""], "date_from"=>"", "date_to"=>"", "sources"=>[""], "genders"=>[""], "ages"=>[""]} permitted: false>, "controller"=>"home", "action"=>"index"} permitted: false>

По сути, я хочу проверить, не является ли какое-либо из значений в params[:search][:categories] не пустым. В приведенном выше случае мы видим, что одно из значений равно строке Hockey, поэтому в этом случае оно должно возвращать false.

Ответы [ 2 ]

2 голосов
/ 25 января 2020

Я бы, вероятно, постарался избежать проверки обоих - пустого массива или массива, включающего только пустую строку. Но если бы мне пришлось, я бы прямо сказал:

array = params[:search][:sources]
array.blank? || array == ['']

Другой вариант может быть:

params[:search][:sources].first.blank?

Но я думаю, что второй вариант сложнее понять (по крайней мере, во всех случаях в который он будет возвращать true).

Для categories условие будет:

params[:search][:categories].any?(&:present?)
0 голосов
/ 26 января 2020
params[:search][:sources].all?(&:blank?)
...