Можно мне любезно посоветовать, как мне проверить, включает ли мой массив значение.

  • у меня есть массив attendees = social.attendances
  • я пытаюсь проверить, присутствует ли user = User.find(4) в массиве attendees

Терминал

user = User.find(4)
  User Load (1.1ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1  [["id", 4]]
 => #<User id: 4, email: "emma@gmail.com"> 


social = Social.find(10)
  Social Load (0.3ms)  SELECT  "socials".* FROM "socials" WHERE "socials"."id" = ? LIMIT 1  [["id", 10]]
 => #<Social id: 10, title: "How to successfully fundraise"> 


attendees = social.attendances
 => #<ActiveRecord::Associations::CollectionProxy [#<user_id: 10>, #<user_id: 4>, #<user_id: 14>, #<user_id: 9>, #<user_id: 6>]> 

Я пробовал следующее:

Я попробовал следующее в терминале, но не повезло

 attendees.include?(user_id:4)
 => false 

attendees.include? "user_id:4"
 => false
0
ARTLoe 19 Окт 2016 в 17:31

4 ответа

Лучший ответ

Я бы сделал что-то вроде этого:

user = User.find(4)
social = Social.find(10)

social.attendances.exists?(user: user)
1
spickermann 19 Окт 2016 в 14:41

Если вам нужно просто проверить, вы можете написать так:

!!attendees.find_by(user_id: 4)
#=> true or false

Если вы хотите сделать это в стиле Rails, вы можете использовать present?:

attendees.find_by(user_id: 4).present?
#=> true or false
2
Ilya 19 Окт 2016 в 14:41

Если у вас есть идентификатор вашей модели, и вы хотите выполнить проверку с помощью SQL-запроса, вы можете сделать

User.exists?(4)

Или в обычном объекте массива вам нужен весь объект User

attendees.include?(user)

Или только с идентификатором

attendees.find { |attendee| attendee.id == 4 }
2
Ursus 19 Окт 2016 в 14:33

Они тоже должны работать

attendees.include?(user) #always use parentheses with methods like this

attendees.select {|a| a.id == 4}.present?
2
C dot StrifeVII 19 Окт 2016 в 14:39