Как я могу проверить, что пользователь не существует, прежде чем вводить пользователя? - PullRequest
0 голосов
/ 10 мая 2018

Рельсы новичок, так что терпите меня ...

Я создал приложение календаря, и владелец календаря может добавлять других пользователей в календарь. Я только что понял, что они могут добавлять одного и того же пользователя много раз, что, очевидно, мне не нужно. Я пробовал кучу разных вещей, включая методы для проверки внутри модели, они не работали ... Я использовал include для проверки ...

Мой текущий метод в моем контроллере:

def update
  if @calendar.calendar_admin?(current_user)
    @new_user = User.find(params[:calendar][:user_ids])
    if @calendar.users.includes(@new_user)
      redirect_to user_calendar_path(@calendar), notice: 'This user has already been added to this calendar.'
    else
      @calendar.users << @new_user
      if @calendar.save
        redirect_to user_calendar_path(@calendar), notice: 'Your calendar has been updated.'
      else
        redirect_to user_calendar_path(@calendar)
      end
    end
  end
end

конец

Неважно, что, он застревает на «этот пользователь уже добавлен в этот календарь», даже если он этого не сделал. Я закапываю нового пользователя, но я даже не уверен, что это правильный способ добавить нового пользователя?

Input

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Вы хотите проверить, если @calendar.users уже содержит определенного пользователя. К сожалению, includes звучит правильно, но он используется для добавления таблицы / модели для объединения результатов (если я пытаюсь запустить вашу строку, она взрывается).

Поэтому я предлагаю следующие альтернативы:

if @calendar.users.to_a.any{|uu| uu.id == @new_user.id}

это выберет всех пользователей в массиве и проверит, существует ли пользователь с таким же идентификатором. Это легко понять, но не оптимально, так как может извлечь много данных.

Вероятно, лучшая альтернатива - использовать базу данных и рассчитывать, связан ли пользователь с вашим желаемым идентификатором:

 if @calendar.users.where("users.id" => @new_user.id).count > 0 
0 голосов
/ 10 мая 2018

Вы хотите использовать include? вместо includes.

include? возвращает логическое значение в зависимости от того, содержит ли набор определенный элемент.includes - это другой метод, который вернет ненулевое значение, которое является правдивым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...