#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. Нет, он разговаривает со мной. Я объяснил, но не могу понять, в чем проблема сейчас. Будет здорово, если вы обновите вопрос с ошибкой соответствующей информации.