Как удалить один экземпляр из коллекции

#ruby-on-rails

#ruby-on-rails

Вопрос:

Я пытаюсь удалить один экземпляр из запроса к базе данных. «l.remove» представляет то, что я хочу сделать, но я знаю, что это неправильно. Я пробовал удалять и уничтожать. уничтожение не сработало, и удаление фактически удалило данные из базы данных. Я просто хочу, чтобы данные были удалены из переменной. Кто-нибудь может мне помочь?

 <%
        @owner = User.find(params[:id])
        @job_list = ShoppingList.where(:user_id=>@user.user_id)

        @job_list.each do |l|
            @temp = FlaggedCandidate.where(:flagged_user_id=>@owner.user_id, :list_id=>l.list_id)

            if !@temp.nil?
                l.remove
            end
        end

        @candidate = FlaggedCandidate.new   

    %>
  

Ответ №1:

основываясь на коде, я предполагаю, что у пользователя много списков покупок.

Вы можете сделать что-то вроде:

 @job_list = @owner.shopping_lists.where( list_id: FlaggedCandidate.where( flagged_user_id: @owner.user_id ).pluck(:list_id) )
  

Это может избавить от необходимости перебора.

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

1. Обратите внимание на других людей, хотя это не решает опубликованный вопрос, но это решило мою проблему.

2. рад, что смог помочь. 🙂

Ответ №2:

Вы пытаетесь удалить запись из базы данных. Чтобы просто изменить коллекцию @job_list , вам нужно отклонить некоторые неудовлетворенные элементы. Вы можете сделать это с select помощью метода (чтобы выбрать помеченные списки заданий) или reject наоборот. Вот как должен выглядеть ваш код:

 @owner = User.find(params[:id])
@job_list = ShoppingList.where(:user_id=>@user.user_id)

@job_list.select! do |job_list|
  FlaggedCandidate.where(
      :flagged_user_id => @owner.user_id,
      :list_id => job_list.list_id
  ).any?
end

@candidate = FlaggedCandidate.new   
  

select! просто измените исходную коллекцию, вместо того, чтобы делать @job_list = @job_list.select { ... }

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

1. я говорю, что «удалить» в undefined

2. это не сбой на мне, но я ничего не получаю в качестве вывода. Я пытаюсь отобразить список заданий следующим образом. <%= f.collection_select(:list_id, @job_list, :list_id, :name) %> я недостаточно знаю ваш код, чтобы иметь возможность изменить его самостоятельно. хотя верхний имеет смысл, если это оператор if перед do . (извините за мой предыдущий пост, я забыл обновить страницу)

3. может быть, есть способ создать новый job_list? Я только что попробовал, если temp.nil? final = l конец внутри . каждый цикл. В моей форме, когда я использую final. он говорит, что его значение равно нулю, но как вы думаете, у меня правильная идея?

4. если вы ссылаетесь на мой. это не сработало. это дало мне ноль

5. Нет, он разговаривает со мной. Я объяснил, но не могу понять, в чем проблема сейчас. Будет здорово, если вы обновите вопрос с ошибкой соответствующей информации.