如何从集合中删除单个实例

时间:2014-06-30 04:18:50

标签: ruby-on-rails

我正在尝试从数据库查询中删除单个实例。 “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   

    %>

2 个答案:

答案 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 { ... }