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 стайле с маленькой буквы, пишите красивый код, что бы не мучиться потом.
и замечаний еще много много можно высказать по синтаксису, так что очень рекомендую его подтянуть.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы