我正在尝试从数据库查询中删除单个实例。 “l.remove”代表我想做的事,但我知道它错了。我试过删除并销毁。 destroy不起作用,删除实际上从数据库中删除了数据。我只想从变量中删除数据。任何人都可以帮助我吗?
<%
@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
%>
答案 0 :(得分:1)
基于代码我假设User有很多ShoppingList。
您可以执行以下操作:
@job_list = @owner.shopping_lists.where( list_id: FlaggedCandidate.where( flagged_user_id: @owner.user_id ).pluck(:list_id) )
这可以省去循环的麻烦。
答案 1 :(得分:0)
您正在尝试从db中删除记录。为了只修改集合@job_list
,您需要拒绝一些不满意的元素。您可以使用select
方法(选择标记的job_lists)或相反的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 { ... }