Mirkom63
@Mirkom63
Я программист

Как отфильтровать массив?

Друзья, помогите решить проблему.
У меня есть куки, в которых храняться id.
Я получаю его в виде массива с id.
Далее я перебираю массив, нахожу объект по id и создаю массив с объектами.
@favoriteRoom=[]
      @arFavoriteRoom.each do |item|
        room=Room.find(item)
        @favoriteRoom.push(room)
      end


Как мне отфильтровать массив @favoriteRoom с помощью where?
Чтобы было так:
result=@favoriteRoom.where(params: value)

Я так понимаю надо собирать не как массив, а как объекты, но как не понимаю...
  • Вопрос задан
  • 180 просмотров
Пригласить эксперта
Ответы на вопрос 4
AlexanderMint
@AlexanderMint
Web Developer
У вас очень странный код (советую поставить rubocop и почитать) и изначально странная реализация, но попробую перевести то что вы написали, на что то более читаемое

favorite_room = cookies[:favorite_room].present? ? Room.where(id: cookies[:favorite_room].split('/')) : []
Ответ написан
Mirkom63
@Mirkom63 Автор вопроса
Я программист
Решил проблему следующим образом:

@arFavoriteRoom=cookies[:favorite_room]
      if not @arFavoriteRoom.blank?
        @arFavoriteRoom=@arFavoriteRoom.split('/')
      else
        @arFavoriteRoom=[]
      end

      favoriteRoom=Room.where(id: @arFavoriteRoom)


Интересно, на сколько этот способ правильный, учитывая что в модели Room будет несколько десяткой тысяч объектов?
Ответ написан
@Givandos
верстка, пыха (прощай, родная), рельсы (вы кто?)
favorite_rooms_ids = cookies[:favorite_room]&.split('/')
favorite_rooms = Room.where(id: favorite_rooms_ids) if favorite_rooms_ids


Ну и перестаньте использовать кемелкейс-стиль для именования переменных.
Почитайте стайл-гайд по руби и рельсам. Кемелкейс используется для именования классов/модулей, но не для переменных.
И собаку в имени переменной использовать нужно только в случае, если эта переменная будет переменной класса, а не переменной метода (то есть будет использоваться еще где-то за пределами конкретного метода). В вашем случае переменная используется тут же (в этом же методе) и не нужна более негде. Значит и именуйте ее корректно.
Ответ написан
Комментировать
ZloyHobbit
@ZloyHobbit
У вас в коде очень много, не то чтобы ошибок, но вещей, которые в ruby делать не рекоммендуется. Очень советую почитать rails guide, книгу Мацумото по руби и "Гибкая разработка веб-приложений в среде Rails".
К примеру:
@ - префикс для instance переменной, она здесь совсем не нужна.
if not - в ruby есть операторы not, and, or и.т.д. но у них приоритет выполнения существенно ниже, чем у аналогов !, && и || так что лучше использовать символы, что бы не прострелить себе ногу.
camel_case используется для названия классов и модулей, и тем более не в js стайле с маленькой буквы, пишите красивый код, что бы не мучиться потом.
и замечаний еще много много можно высказать по синтаксису, так что очень рекомендую его подтянуть.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы