#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 %>