Как мне проверить, присутствует ли значение в моем массиве? — Rails 4

#ruby-on-rails #ruby

#ruby-on-rails #ruby

Вопрос:

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

  • у меня есть массив 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
  

Ответ №1:

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

 User.exists?(4)
  

Или, в обычном объекте массива, вам нужен весь пользовательский объект

 attendees.include?(user)
  

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

 attendees.find { |attendee| attendee.id == 4 }
  

Ответ №2:

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

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

attendees.select {|a| a.id == 4}.present?
  

Ответ №3:

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

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

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

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

Комментарии:

1. это очень javascripty

Ответ №4:

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

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

social.attendances.exists?(user: user)
  

Комментарии:

1. Спасибо @spickermann! это отлично работает в представлениях. <% if @social.attendances.exists?(user: current_user) %> #do something <% end %> как я напишу это в модели social.rb — будет ли это так ———> def attending? self.attendances.exists?(user: user) end

2. понял это! — спасибо @spickemann! social.rb def attending?(user) self.attendances.exists?(user: user) end просмотры /social/show.html.erb <% if @social.attending?(current_user) %> #do something <% end %>